Qt绘制垂直布局

问题描述:

我有QVBoxLayout与多个孩子,我希望能够在其上绘制。我尝试过实施paintEvent(QPaintEvent *)的布局,但是我绘制的所有东西都留在孩子的下面。我该怎么做?我很感谢示例代码。Qt绘制垂直布局

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