【问题标题】:Qt: showMaximized() not working in WindowsQt:showMaximized() 在 Windows 中不起作用
【发布时间】:2014-11-26 19:25:21
【问题描述】:

我通过双击在我的应用程序(Windows)中打开一个文件。我将通过参数收到的文件名传递给我的打开逻辑。我正在调用 showMaximized(),但它没有被接收。打开的窗口没有最大化,默认位于屏幕的左上角。

请注意,所有这些逻辑流程都是通过 ma​​in() 进行的,因此 showMaximized() 可能在事件循环开始之前被调用。这是否会阻止 showMaximized() 正常工作?如果是,如何解决?

我也尝试使用 QTimer::singleShot(0,...,...) (以便让事件循环开始)但这甚至停止了非最大化屏幕。

PS:在 Mac 中,屏幕会通过事件 (QEvent::FileOpen) 进行最大化

【问题讨论】:

  • 您能否提供一个演示问题的最小代码示例?

标签: c++ windows qt file-association


【解决方案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。

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2011-02-12
    • 2016-03-08
    相关资源
    最近更新 更多