这让我发疯。我有一个自定义菜单类,当设置为可见时,它会显示位于特定文件夹中的项目列表。当按下硬件按钮时,我的应用程序获取最新的项目列表,用它们填充菜单,然后返回。
显示这些项目的菜单使用填充了自定义小部件的 QListWidget。每个小部件都包含一个或多个水平布局的 QLabel,并在显示菜单时创建。为了根据可用的菜单宽度调整显示的文本,我需要在根据布局调整大小之后,但在菜单对用户可见之前获取 QLabel 的大小。问题是,在构建我的列表的所有函数返回之前,我的布局不会更新。
我已经尝试过 QApplication::ProcessEvents() 和布局更新函数,但在返回之前它们都没有更新我的 QLabels 的值。我可以在最初按下按钮时设置一个 QTimer,让它显示菜单、更新项目并自行停止,但这似乎是一个糟糕的解决方案。
任何帮助将不胜感激!我花了一天的大部分时间在这上面。
马龙
我遇到了这个确切的问题,无法在 Internet 上的任何地方找到答案。调用Layout.update()、Layout.activate()、 或widget.adjustSize()(所有地方都建议)都不起作用。
我有一个垂直布局的小部件,我想向其中添加 QLabel,然后立即使用 QLabel 的大小。
唯一可靠工作的是
layout->addWidget(myLabel);
myLabel->show();
size = myLabel->size();
Run Code Online (Sandbox Code Playgroud)
在您从函数返回并允许 Qt 事件循环进行或手动调用show()自己之前,布局似乎不会重新计算。