Qt绘制覆盖垂直布局

4

我有一个包含多个子项的QVBoxLayout,希望能在其上面绘制图形。我已经尝试对该布局实现paintEvent(QPaintEvent *)方法,但是我所绘制的所有内容都位于子项之下。请问该如何实现?如果提供示例代码,我会非常感激。

1个回答

4

布局没有paintEvent成员,所以您无法重新实现它。我很惊讶您能够从这个操作中获得一些效果。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接