2012-09-09 85 views
1

在Qt:如何在插入新項目後獲得佈局的高度?

QVBoxLayout *layout = (QVBoxLayout*)this->layout(); 

printf("Before: %d %d\n", this->height(), layout->totalSizeHint().height()); 

QWidget *widget = new SubWidget(); 
layout->insertWidget(0, widget); 
this->updateGeometry(); 
this->adjustSize(); 
this->update(); 
this->repaint(); 

printf("After: %d %d %d\n", this->height(), layout->totalSizeHint().height(), widget->height()); 

的問題是,我得到同樣的號碼之前和之後,儘管小部件高度爲非零(在我的情況下約400)。爲什麼?

回答

2

該窗口已經可見,並且您插入的小部件尚不可見。該佈局使其可以異步顯示(模式下的invokeMethod調用)。

您可以等待調用實際發生與QApplication::processEvents()或自己告訴他們:

QWidget *widget = new SubWidget(); 
layout->insertWidget(0, widget); 
qApp->processEvents(); 
// or 
widget->show(); 
+0

真棒的感謝! – chacham15

相關問題