2012-06-14 10 views

Respuesta

8

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.

Screenshot of the example

// 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(); 
} 
0

yo sepa: Nº

Reproductores se dibujan en orden de profundidad, por lo que lo que sus pinturas QDockWidget clase derivada, serán atraídos por el control contenido cuando se actualizan (inmediatamente después, sin duda, , porque las actualizaciones de pintura se propagan a los widgets secundarios).

+0

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. –

+0

@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

+1

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. –

Cuestiones relacionadas