Qt:showMaximized() 在 Windows 中不起作用
Posted
技术标签:
【中文标题】Qt:showMaximized() 在 Windows 中不起作用【英文标题】:Qt: showMaximized() not working in Windows 【发布时间】:2014-11-26 19:25:21 【问题描述】:我通过双击在我的应用程序(Windows)中打开一个文件。我将通过参数收到的文件名传递给我的打开逻辑。我正在调用 showMaximized(),但它没有被接收。打开的窗口没有最大化,默认位于屏幕的左上角。
请注意,所有这些逻辑流程都是通过 main() 进行的,因此 showMaximized() 可能在事件循环开始之前被调用。这是否会阻止 showMaximized() 正常工作?如果是,如何解决?
我也尝试使用 QTimer::singleShot(0,...,...) (以便让事件循环开始)但这甚至停止了非最大化屏幕。
PS:在 Mac 中,屏幕会通过事件 (QEvent::FileOpen) 进行最大化
【问题讨论】:
您能否提供一个演示问题的最小代码示例? 【参考方案1】:最简单的解决方法是在使用 showMaximized() 之前使用 resize(800,600)。我在 Windows 8.1 上的 Qt 5.7.0 中有类似的错误。
【讨论】:
先生,您真是个天才。您的技巧还解决了我在 UHD 显示器中的错误showMaximized()
呼叫。【参考方案2】:
进程第一次调用 ShowWindow 时,会忽略 show 命令并使用 STARTUPINFO 结构中提供的命令(应与 WinMain 中的 nCmdShow 参数相对应)。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx
这种令人惊讶的行为倾向于在您所描述的问题中表现出来。如果您不想直接使用任何 Win32 API 调用,您可以通过简单地发出 QT 的 showMaximized 调用两次来解决它。
【讨论】:
尝试调用 showMaximized 两次,但仍然是相同的行为。【参考方案3】:我的回答迟了,但我写它以防它对某人有帮助。
我正在使用 PyQt 6 在 Windows 11 上试验同样的问题。
最初我使用Vasilyev Eugene提出的解决方案,但在某些情况下会失败。
我发现的最佳解决方案是使用延迟 1000 毫秒的 sigleShot:
QtCore.QTimer.singleShot(1000, self.showMaximized)
最终用户几乎察觉不到时间,您可以尝试使用较低的值,显然 0 除外。
此解决方案适用于 PyQt,但也适用于 Qt。
【讨论】:
以上是关于Qt:showMaximized() 在 Windows 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
我用 QT4.7 调用了 showMaximized(),出现了一个奇怪的问题