在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),但我之前和之后都得到相同的数字。为什么呢?
答案 0 :(得分:2)
窗口已经可见,您插入的小部件尚不可见。布局使它们异步可见(在invokeMethod
模式下调用Qt::QueuedConnection
)。
您可以等待实际使用QApplication::processEvents()
进行通话或自行显示:
QWidget *widget = new SubWidget();
layout->insertWidget(0, widget);
qApp->processEvents();
// or
widget->show();