我有一个QT应用程序,该应用程序在启动时会改变屏幕分辨率(通过UNIX中的xrandr或OSX上的CGConfigureDisplayMode)

屏幕分辨率更改成功完成后,应用程序将继续。

然后,它使用QApplication::desktop()->screenGeometry(int)检索各个屏幕的大小。

问题是QDesktopWidget::screenGeometry()返回分辨率更改之前的尺寸。

在此阶段,尚未开始Qt事件循环。

我当然会在Qt事件循环运行后收到QDesktopWidget::resized(int)信号,然后调用QDesktopWidget::screenGeometry将返回更新的尺寸。但是到那时为时已晚。

收到信号后,我可以强制刷新屏幕,然后重新计算所有内容,但这会产生难看的效果,因为您首先看到窗口显示的尺寸错误,然后再使用正确的尺寸。

所以问题是:

如何确保QDesktopWidget::screenGeometry()返回实际值,而不是应用程序启动时返回的实际值。

最佳答案

最终,您可以在创建MainWindow之前在main.cpp(int main())中实现桌面分辨率开关。如果可能的话,您可以进行切换,并且窗口将具有正确的尺寸。您可能也可以在其中运行一个简短的自定义事件循环。

作为最后的选择,将您的应用程序分成2个进程。第一个将设置屏幕分辨率,也将被隐藏。分辨率切换成功后,您的应用程序将以正确的尺寸开始调用真正的应用程序。

10-01 20:08