如何在应用布局规则后预览窗口中窗口小部件的大小,之前我实际上show()
窗口小部件窗口?在初始show()
命令之前,似乎所有大小都是100x30。我该如何解决这个问题?
答案 0 :(得分:9)
invalidate()
为我工作。
请注意,如果您执行以下操作,它将按照此处的要求工作(至少在我的代码中似乎没问题):
widget->show();
widget->layout()->invalidate();
widget->hide();
这不显示屏幕上的小部件,因为在hide()
发生之前您不会将控制权交还给队列。在这两者之间,invalidate()
计算正确的位置。
答案 1 :(得分:8)
对我来说,以下工作:
window->layout()->update()
window->layout()->activate()
这可能与Alexis的回答相同,但它不需要显示 - 然后隐藏窗口。
答案 2 :(得分:3)
您可以尝试使用Google搜索“qt geometry before show”,在qtcentre.org论坛上显示标题为Force geometry update of hidden widget的主题,您可以在其中阅读 Wysota 答案:
你可以调用invalidate() 布局。它应该重新计算自己 然后。如果不是那么就有这个秘密 使小部件信服它的属性 正在展示,然后你应该 能够强制布局 重新计算。但尝试其他事情 首先,这不是非常的事情 可靠。
和这个
Qt :: WA_WState_ExplicitShowHide设置为 true和Qt :: WA_WState_Hidden设置为 假。请务必还原值 (特别是第二个)在你之前 实际上在屏幕上显示小部件。
答案 3 :(得分:2)
使用QWidget :: sizeHint根据所有子窗口小部件和布局的sizeHints获取顶级窗口小部件的所需大小。或者调用QWidget :: adjustSize来实际运行布局并调整整个小部件树的大小。请注意,adjustSize会将顶级窗口限制为屏幕的2/3,因此您可能无法获得所需的大窗口。
答案 4 :(得分:1)
我尝试了其他人发布的各种解决方案(show
& hide
,update
& activate
,invalidate
和WA_WState_ExplicitShowHide
& ; WA_WState_Hidden
)但是在我的应用程序中调用show()
之前,我必须居中的所有小部件都不正确。我花了几个小时挖掘,我的问题是在 QWidgetItemV2 中缓存了不正确的大小。几分钟后,我想出了这个:
for(auto*child:widget->findChildren<QWidget*>()){child->updateGeometry();}
widget->updateGeometry();