我有一个包含多个子项的QVBoxLayout
,希望能在其上面绘制图形。我已经尝试对该布局实现paintEvent(QPaintEvent *)
方法,但是我所绘制的所有内容都位于子项之下。请问该如何实现?如果提供示例代码,我会非常感激。
布局没有paintEvent
成员,所以您无法重新实现它。我很惊讶您能够从这个操作中获得一些效果。
QWidget
(我们称之为包装器),并将您的QVBoxLayout
添加到此窗口小部件中。setParent()
将其添加到包装器中,而不是将其添加到布局中。简单示例(已测试):
class MyWidget : public QWidget {
public:
void paintEvent(QPaintEvent *e) {
QWidget::paintEvent(e);
QPainter p(this);
p.fillRect(4, 4, 30, 30, QBrush(Qt::red));
}
};
QWidget* wrapper = new QWidget();
QVBoxLayout* layout = new QVBoxLayout(wrapper);
layout->addWidget(new QLabel("test1"));
layout->addWidget(new QLabel("test2"));
MyWidget* overlay = new MyWidget();
overlay->setParent(wrapper);
wrapper->show();