Claro que es posible. Es bastante simple de hacer, de hecho. Debe colocar un widget secundario que se encuentre encima de todo lo demás en su QDockWidget
. Para hacerlo, debe ser el último widget secundario que agregue a su dockwidget. Ese widget no debe dibujar su fondo, y luego puede dibujar sobre los elementos secundarios del dockwidget. El tamaño del widget debe rastrear el tamaño del widget padre.
A continuación se muestra un ejemplo de compilación independiente.
// https://github.com/KubaO/stackoverflown/tree/master/questions/overlay-line-11034838
#include <QtGui>
#if QT_VERSION > QT_VERSION_CHECK(5,0,0)
#include <QtWidgets>
#endif
class Line : public QWidget {
void paintEvent(QPaintEvent *) override {
QPainter p{this};
p.setRenderHint(QPainter::Antialiasing);
p.drawLine(rect().topLeft(), rect().bottomRight());
}
public:
using QWidget::QWidget;
};
class Window : public QWidget {
QHBoxLayout layout{this};
QLabel left{"Left", this};
QLabel right{"Right", this};
Line line{this};
void resizeEvent(QResizeEvent *) override {
line.setGeometry(rect());
}
public:
Window(QWidget * parent = nullptr) : QWidget{parent} {
left.setFrameStyle(QFrame::Box | QFrame::Raised);
layout.addWidget(&left);
right.setFrameStyle(QFrame::Box | QFrame::Raised);
layout.addWidget(&right);
}
};
int main(int argc, char *argv[])
{
QApplication app{argc, argv};
Window w;
w.show();
return app.exec();
}
que el dibujo con el fin de profundidad es precisamente lo que le permite dibujar sobre los widgets subyacentes utilizando widgets extras colocadas en la parte superior de ellos. Es simple, incluso :) Los apoyos van al nuevo modelo de representación de widgets presentado en IIRC Qt 4.1. –
@KubaOber Tiene toda la razón, pero eso no es lo que pidió el OP. El OP preguntó si un widget de contenedor puede pintar sobre widgets infantiles, la respuesta es no. Su solución es una posible solución alternativa, pero como no involucra una pintura de clase derivada de 'QDockWidget' sobre widgets contenidos, no responde a la pregunta del OP. – cmannett85
Ofrece una solución. El widget contenedor es libre de agregar un widget secundario a sí mismo. Seguro que el código de pintura no entra en el 'paintEvent' del contenedor, pero a quién le importa eso. –