Certo che è possibile. È abbastanza semplice da fare, infatti. Devi posizionare un widget figlio che si sovrapponga a tutto il resto nel tuo QDockWidget
. Per farlo, deve essere l'ultimo widget figlio che aggiungi al tuo dockwidget. Quel widget non deve disegnare il suo background, e può quindi disegnare su qualsiasi figlio del dockwidget. Le dimensioni del widget devono tenere traccia delle dimensioni del widget genitore.
Di seguito è un esempio compilabile autonomo.
![Screenshot of the example](https://i.stack.imgur.com/PUUkd.png)
// 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();
}
fonte
2012-06-15 03:32:51
che il disegno in modo approfondito è precisamente ciò che permette di disegnare sopra i widget sottostanti utilizzando i widget aggiuntivi posizionati su di essi. È semplice, anche :) I puntelli vanno al nuovo modello di rendering dei widget introdotto in IIRC Qt 4.1. –
@KubaOber Hai assolutamente ragione, ma non è quello che l'OP chiedeva. L'OP ha chiesto se un widget del contenitore può dipingere sui widget figli - la risposta è no. La soluzione è una soluzione possibile, ma poiché non coinvolge una classe derivata 'QDockWidget' su widget contenuti, non risponde alla domanda dell'OP. – cmannett85
Offre una soluzione. Il widget contenitore è libero di aggiungere un widget figlio a se stesso. Certo, il codice della pittura non entra nel 'paintEvent' del contenitore, ma a chi importa. –