插入新项目后如何获得布局的高度?

时间:2012-09-09 17:14:17

标签: c++ qt layout

在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),但我之前和之后都得到相同的数字。为什么呢?

1 个答案:

答案 0 :(得分:2)

窗口已经可见,您插入的小部件尚不可见。布局使它们异步可见(在invokeMethod模式下调用Qt::QueuedConnection)。

您可以等待实际使用QApplication::processEvents()进行通话或自行显示:

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