我使用QFileDialog的静态成员函数时遇到问题 . 当文件资源管理器对话框打开时,另一个窗口在后台打开,但不包含任何内容:它不仅仅是绘制的 . 当我选择一些东西并关闭文件对话框时它会关闭,但它仍然很烦人 .

我想摆脱它 . 我读了一个关于这个问题的现有thread,建议给对话框的父级作为函数的参数 . 所以我用了一个非常简单的父小部件:

QString str = QFileDialog::getOpenFileName(new QWidget(),trUtf8("Choose a file"));

然后我没有一个恼人的窗户,而是两个 . 当我关闭文件浏览器对话框时,第一个关闭,但第二个关闭,直到我关闭应用程序 .

我认为第二个窗口是我作为父母提供的QWidget . 第一个参数的默认值是0,但在这种情况下Qt可能会创建一个QWidget() .

我尝试创建一个独立的QWidget并在调用getOpenFileName()之前隐藏它:

QWidget *w = new QWidget();
w->hide();
QString str = QFileDialog::getOpenFileName(w,trUtf8("Choose a file"));

但它没有改变任何东西,我仍然得到两个不需要的窗口 . 最后,我尝试使用QLabel作为父级来查看它是否真的显示:

QLabel *l = new QLabel("Test");
QString str = QFileDialog::getOpenFileName(l,trUtf8("Choose a file"));

但似乎并非如此 . 显然没有什么是处理那些窗户......它们不仅仅是涂漆,当你在它们上面移动一个窗口时,你可以看到它留下的痕迹 .

我没有想法......有没有人有任何其他想法来解决这个烦人的问题?