5 inheritance qt paint draw qdockwidget
我在Qt中有一个继承QDockWidget的类.该类包含另一个小部件.是否有可能在我的QDockWidget继承类中定义一个函数,该函数在包含的小部件之上绘制东西?就像绘画独立于包含的小部件,但要链接到继承的类.
谢谢
当然有可能.事实上,这很简单.您需要放置一个位于您的其他所有内容之上的子窗口小部件QDockWidget.要这样做,它必须是您添加到dockwidget的最后一个子窗口小部件.该小部件不得绘制其背景,然后它可以绘制dockwidget的任何子节点.窗口小部件的大小必须跟踪父窗口小部件的大小.
以下是一个独立的示例.

// 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 {
protected:
void paintEvent(QPaintEvent *) override {
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing);
p.drawLine(rect().topLeft(), rect().bottomRight());
}
public:
explicit Line(QWidget *parent = nullptr) : QWidget(parent) {
setAttribute(Qt::WA_TransparentForMouseEvents);
}
};
class Window : public QWidget {
QHBoxLayout layout{this};
QPushButton left{"Left"};
QLabel right{"Right"};
Line line{this};
protected:
void resizeEvent(QResizeEvent *) override {
line.resize(size());
}
public:
explicit Window(QWidget *parent = nullptr) : QWidget(parent) {
layout.addWidget(&left);
right.setFrameStyle(QFrame::Box | QFrame::Raised);
layout.addWidget(&right);
line.raise();
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
Window w;
w.show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)