我正在使用 PyQt4 4.11.4 (Qt 4.8.7) 和 Python 2.7.12 编写应用程序。使用 RemoteApp(内置 Windows 远程桌面服务)运行它时,我无法让窗口以最大化状态打开:它在几个(单个?)帧中显示为最大化,并立即跳转到恢复状态。重现错误的代码:
from PyQt4.QtGui import QApplication, QDialog
from PyQt4.QtCore import Qt
import sys
app = QApplication(sys.argv)
w = QDialog()
w.setWindowFlags(Qt.Window)
w.showMaximized()
w.show()
sys.exit(app.exec_())
使用 Python 2.6.4 和 Qt 4.5.3 无法重现错误(应用程序是使用 PyInstaller 构建的,我找不到获取 PyQt 版本的方法)。
我发现的唯一提到的类似错误(不确定是否相同)是here。
这个错误有什么修复吗?我不考虑使用较旧的 Qt 版本作为解决方案。
UP1: 上面用 C++ 重写的代码片段产生了相同的行为,所以这是一个 Qt 错误。
UP2:
Qt 4.8 中的 Windows 具有WS_POPUP
和WS_combine_POPUPWINDOW
样式,而在 Qt 4.5 中则没有。修复此问题时可能引入的错误。
UP3:
是的,问题出在WS_POPUP
风格上。手动删除后,窗口保持最大化:
...
HWND hWnd = w.winId();
long style = GetWindowLong(hWnd, GWL_STYLE);
SetWindowLong(hWnd, GWL_STYLE, style & ~WS_POPUP);
...
正在寻找不同的方法来删除它...