【问题标题】:Qt draw over vertical layoutQt 在垂直布局上绘制
【发布时间】:2013-06-19 13:01:51
【问题描述】:

我有 QVBoxLayout 有多个孩子,我希望能够在上面画画。我已经尝试为布局实现paintEvent(QPaintEvent *),但我绘制的所有内容都保留在孩子们的下方。我该怎么做?非常感谢您提供示例代码。

【问题讨论】:

    标签: c++ qt paint qpainter


    【解决方案1】:

    布局没有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();
    

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 2011-07-18
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多