我有一个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个进程。第一个将设置屏幕分辨率,也将被隐藏。分辨率切换成功后,您的应用程序将以正确的尺寸开始调用真正的应用程序。