Qt: showMaximized() 在 Windows 中不起作用

Qt: showMaximized() not working in Windows

本文关键字:Windows 不起作用 showMaximized Qt      更新时间:2023-10-16

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

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

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

PS:在Mac中,屏幕正在最大化,因为它通过事件(QEvent::FileOpen)发生

最简单的解决方法是在使用 showMaximized() 之前使用 resize(800,600)。我在Windows 5.7.0上的Qt 8.1中遇到了类似的错误。

我的回答很晚,但我写它以防它帮助某人。

我正在使用 PyQt 11 在 Windows 6 上尝试同样的问题。

最初,我使用了瓦西里耶夫·尤金提出的解决方案,但在某些情况下失败了。

我发现最好的解决方案是使用延迟为1000毫秒的sigleShot:

QtCore.QTimer.singleShot(1000, self.showMaximized)

最终用户几乎察觉不到时间,您可以尝试较低的值,显然除了 0。

此解决方案适用于 PyQt,但也适用于 Qt。

因此,

在Windows上,我在应用程序窗口中使用了计时器。我知道这很丑陋,但它有效...

ApplicationWindow {
    Timer {
       id: fullscreenTimer
       interval: 1000; running: false; repeat: false;
       onTriggered: root.showFullScreen();
    }
    Component.onCompleted: {
       fullscreenTimer.start();
    }
}

进程第一次调用 ShowWindow 时,show 命令将被忽略,并使用 STARTUPINFO 结构中提供的命令(该命令应与 WinMain 中的 nCmdShow 参数相对应)。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx

这种令人惊讶的行为倾向于表现在您所描述的问题中。如果您不想直接使用任何 Win32 API 调用,则只需发出 QT 的 showMaximized 调用两次即可解决此问题。