Chắc chắn điều đó là có thể. Nó là khá đơn giản để làm, trên thực tế. Bạn cần đặt tiện ích con nằm trên đầu mọi thứ khác trong số QDockWidget
của mình. Để làm điều đó, nó phải là widget con cuối cùng bạn thêm vào dockwidget của bạn. Widget đó không được vẽ nền của nó, và sau đó nó có thể vẽ trên bất kỳ trẻ em nào của dockwidget. Kích thước của tiện ích phải theo dõi kích thước của tiện ích con.
Dưới đây là ví dụ có thể kết hợp được.

// 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();
}
Nguồn
2012-06-15 03:32:51
Đó vẽ theo thứ tự độ sâu chính xác là những gì cho phép bạn vẽ trên widget cơ bản sử dụng thêm các widget đặt trên đầu trang của họ. Nó đơn giản, ngay cả :) Đạo cụ đi đến mô hình dựng hình widget mới được giới thiệu trong IIRC Qt 4.1. –
@KubaOber Bạn hoàn toàn đúng, nhưng đó không phải là những gì OP hỏi. OP hỏi nếu một widget container có thể vẽ trên các widget con - câu trả lời là không. Giải pháp của bạn là một giải pháp có thể, nhưng vì nó không liên quan đến việc vẽ lớp có nguồn gốc từ 'QDockWidget' trên các widget chứa, nó không trả lời câu hỏi của OP. – cmannett85
Nó cung cấp một giải pháp. Tiện ích vùng chứa là miễn phí để thêm tiện ích con cho chính nó. Chắc chắn mã vẽ không đi vào 'paintEvent' của container, nhưng ai quan tâm đến điều đó. –