我正在打开我的应用程序(在Windows中)中的一个文件,方法是双击它。我通过参数将收到的文件名传递给我的打开逻辑。在那里我调用了showMaximized(),但它没有被选中。打开的窗口没有最大化,默认位于屏幕的左上角。
请注意,所有这些逻辑流都是通过main(),因此showMaximized()可能在事件循环开始之前被调用。这是否会停止showMaximized()正常工作?如果是,如何解决?
我还尝试使用QTimer::singleShot(0,...,...)(以便启动事件循环),但这甚至会停止启动非最大化屏幕。
PS:在Mac中,屏幕通过事件(QEvent::FileOpen)最大化
4条答案
按热度按时间2nbm6dog1#
最简单的解决方法是在使用showMaximized()之前使用resize(800,600)。我在Windows 8.1上的Qt 5.7.0中遇到了类似的错误。
3gtaxfhh2#
我的回答晚了,但我写它,以防它帮助别人。
我正在Windows 11上用PyQt 6试验同样的问题。
最初我使用Vasilyev Eugene提出的解决方案,但在某些情况下失败了。
我发现的最佳解决方案是使用延迟为1000ms的sigleShot:
最终用户几乎察觉不到时间,您可以尝试使用较低的值,但显然0除外。
此解决方案适用于PyQt,但也适用于Qt。
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调用两次来解决它。
np8igboo4#
所以在Windows上我在应用程序窗口中使用了计时器。我知道它很丑,但是它很好用。