c++ - 插入新项目后如何获取布局的高度?

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

最佳答案

窗口已经可见,而您要插入的小部件尚不可见。布局使它们异步可见(在 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/

相关文章:

c++ - 对象指针以相反的顺序打印结果

c++ - 使用 QGraphicsScene 在 QT 中跟踪计数的文本字段

Android Studio 字体问题

c++ - opencv matchTemplate 在计算机之间给出不一致的结果

c++ - 如何用 C++ 中的整数替换 char 数组中的某些项?

c++ - 单例类和线程安全

c++ - 将 python 脚本添加到 QT 应用程序的最佳方法?

c++ - 在Qt3D中进行碰撞检测的预期方法(或好方法)是什么?

android - 文本大小不会因不同的屏幕布局而改变?

css - 从已发布的 Google 文档电子表格中删除页眉和页脚