【发布时间】:2013-06-19 13:01:51
【问题描述】:
我有 QVBoxLayout 有多个孩子,我希望能够在上面画画。我已经尝试为布局实现paintEvent(QPaintEvent *),但我绘制的所有内容都保留在孩子们的下方。我该怎么做?非常感谢您提供示例代码。
【问题讨论】:
我有 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();
【讨论】: