Qt:showMaximized()无法在Windows中运行

cnjp1d6j  于 2023-02-20  发布在  Windows
关注(0)|答案(4)|浏览(408)

我正在打开我的应用程序(在Windows中)中的一个文件,方法是双击它。我通过参数将收到的文件名传递给我的打开逻辑。在那里我调用了showMaximized(),但它没有被选中。打开的窗口没有最大化,默认位于屏幕的左上角。
请注意,所有这些逻辑流都是通过main(),因此showMaximized()可能在事件循环开始之前被调用。这是否会停止showMaximized()正常工作?如果是,如何解决?
我还尝试使用
QTimer::singleShot(0,...,...)
(以便启动事件循环),但这甚至会停止启动非最大化屏幕。
PS:在Mac中,屏幕通过事件(QEvent::FileOpen)最大化

2nbm6dog

2nbm6dog1#

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

3gtaxfhh

3gtaxfhh2#

我的回答晚了,但我写它,以防它帮助别人。
我正在Windows 11上用PyQt 6试验同样的问题。
最初我使用Vasilyev Eugene提出的解决方案,但在某些情况下失败了。
我发现的最佳解决方案是使用延迟为1000ms的sigleShot:

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

最终用户几乎察觉不到时间,您可以尝试使用较低的值,但显然0除外。
此解决方案适用于PyQt,但也适用于Qt。

tcomlyy6

tcomlyy63#

进程第一次调用ShowWindow时,show命令将被忽略,并使用STARTUPINFO结构中提供的命令(该结构应与WinMain中的nCmdShow参数相对应)。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx
这种令人惊讶的行为往往会在您所描述的问题中表现出来。如果您不想直接使用任何Win32 API调用,您可以通过简单地发出QT的showMaximized调用两次来解决它。

np8igboo

np8igboo4#

所以在Windows上我在应用程序窗口中使用了计时器。我知道它很丑,但是它很好用。

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

相关问题