Qt绘制垂直布局
问题描述:
我有QVBoxLayout
与多个孩子,我希望能够在其上绘制。我尝试过实施paintEvent(QPaintEvent *)
的布局,但是我绘制的所有东西都留在孩子的下面。我该怎么做?我很感谢示例代码。Qt绘制垂直布局
答
布局没有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();