无法通过RDP(RemoteApp)使用Qt4打开最大化窗口

时间:2017-01-24 10:28:29

标签: python qt qt4 pyqt4 remoteapp

我正在使用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_POPUPWS_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);
...

搜索不同的方法将其删除......

1 个答案:

答案 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