我正在使用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无法复制Bug(应用程序是使用PyInstaller构建的,我无法找到获取PyQt版本的方法)。
我发现的唯一提及的类似错误(不确定是否相同)是here。
这个bug有什么问题吗?我不认为使用较旧的Qt版本作为解决方案。
UP1: 上面用C ++重写的片段会产生相同的行为,所以这是一个Qt bug。
UP2:
Qt 4.8中的Windows具有WS_POPUP
和WS_combine_POPUPWINDOW
样式,而在Qt 4.5中则没有。修复this one时可能会引入错误。
UP3:
是的,问题是WS_POPUP
风格。手动删除后,窗口保持最大化:
...
HWND hWnd = w.winId();
long style = GetWindowLong(hWnd, GWL_STYLE);
SetWindowLong(hWnd, GWL_STYLE, style & ~WS_POPUP);
...
搜索不同的方法将其删除......
答案 0 :(得分:0)
通过还原此补丁并重建Qt解决了问题:
int& func(int i){
int *p = &i;
return *p;
}
int& func2(int i){
vector<int> v;
v.push_back(i);
return v[0];
}
int & func3(int i){
array<int,4> arr;
arr[0] = i;
return arr[0];
}
int& func4(int i){
int j = i;
return j;
}
int main(){
cout<<func(3)<<endl;
cout<<func2(10)<<endl;
cout<<func3(100)<<endl;
cout<<func4(123)<<endl;
return 0;
}
outuput:
3
0
100
segmentation faul(core dumped)
找到here