我有QVBoxLayout
多个孩子,我希望能够在上面画画。我已经尝试实现paintEvent(QPaintEvent *)
布局,但我画的所有东西都留在孩子们的下面。我该怎么做?我会感谢示例代码。
问问题
2209 次
1 回答
4
布局没有paintEvent
成员,因此您无法重新实现它。我很惊讶你能从这个动作中得到一些效果。
- 将新
QWidget
的(我们称之为包装器)添加到您的表单中并将您的添加QVBoxLayout
到此小部件中。 - 创建另一个小部件(覆盖)并使用 将其添加到包装器中
setParent()
,而不是将其添加到布局中。 - 重新实现叠加层的paintEvent 或向叠加层添加一些其他小部件。
简单示例(已测试):
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();
于 2013-06-19T18:26:20.887 回答