Qt绘制垂直布局

Qt draw over vertical layout

本文关键字:布局 垂直 绘制 Qt      更新时间:2023-10-16

我有多个孩子的QVBoxLayout,我想能够在它上面画画。我已经尝试实现paintEvent(QPaintEvent *)的布局,但我画的一切留在孩子。我该怎么做呢?如果有样例代码,我将不胜感激。

布局没有paintEvent成员,所以你不能重新实现它。我很惊讶你能从这次行动中获得一些效果。

    将新的QWidget(我们称之为wrapper)添加到表单中,并将QVBoxLayout添加到这个小部件中。
  1. 创建另一个小部件(叠加),并使用setParent()将其添加到包装器中,而不是将其添加到布局中。
  2. 重新实现覆盖的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();