2013-06-19 172 views
3

我有QVBoxLayout與多個孩子,我希望能夠在其上繪製。我嘗試過實施paintEvent(QPaintEvent *)的佈局,但是我繪製的所有東西都留在孩子的下面。我該怎麼做?我很感謝示例代碼。Qt繪製垂直佈局

回答

3

佈局沒有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();