在 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),但我得到的前后数字相同。为什么?
最佳答案
窗口已经可见,而您要插入的小部件尚不可见。布局使它们异步可见(在 Qt::QueuedConnection
模式下使用 invokeMethod
调用)。
您可以使用 QApplication::processEvents()
等待调用实际发生,也可以自己展示它们:
QWidget *widget = new SubWidget();
layout->insertWidget(0, widget);
qApp->processEvents();
// or
widget->show();
关于c++ - 插入新项目后如何获取布局的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12341145/