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

4

1 回答 1

2

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

您可以等待通话实际发生,QApplication::processEvents()也可以亲自向他们展示:

 QWidget *widget = new SubWidget();
 layout->insertWidget(0, widget);
 qApp->processEvents();
 // or
 widget->show();
于 2012-09-09T22:12:22.053 回答