我正在尝试获取QFileDialog以选择目录。但是,当对话框打开时,父窗口不会更新。它会执行此操作,使它保留在其上拖动的任何其他窗口的图像,并且直到关闭对话框后才重绘。
下面的代码在我的主窗口中的一个插槽中,该插槽连接到QPushButton的“ clicked”信号:
QFileDialog dlog(this);
int result;
... set dialog to directories only ...
result = dlog.exec();
if (result == QDialog::Accepted) {
... blah blah blah ...
}
它根本不影响功能,因为无论如何打开对话框,用户都无法与窗口进行交互。只是一个令人讨厌的视觉故障。
这在QT 5.11中。现在,我正在Linux上进行开发,但是此应用程序最终将移植到Windows,因此希望能在两个OS上都能使用的解决方案。
编辑2:下面是一个最小,可验证且完整的示例。此代码创建一个带有单个按钮的窗口。单击按钮打开文件对话框。对话框打开后,在主窗口中拖动任何窗口都会导致上面屏幕截图中所示的愚蠢行为。关闭对话框会使主窗口刷新,就像什么也没发生一样。
mainwindow.h:
#include <QMainWindow>
#include <QPushButton>
#include <QFileDialog>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
public slots:
void handleclick();
};
mainwindow.cpp:
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QPushButton *btn = new QPushButton(this);
QObject::connect(btn, SIGNAL(clicked(bool)), this, SLOT(handleclick()));
}
void MainWindow::handleclick()
{
QFileDialog dlog(this);
dlog.exec();
}
main.cpp文件由QTCreator自动生成,但是为了完整起见,这里还是这样:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}