4

我有QVBoxLayout多个孩子,我希望能够在上面画画。我已经尝试实现paintEvent(QPaintEvent *)布局,但我画的所有东西都留在孩子们的下面。我该怎么做?我会感谢示例代码。

4

1 回答 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();
于 2013-06-19T18:26:20.887 回答