QFileDialog不允许父窗口更新

时间:2018-10-30 21:13:55

标签: qt

我正在尝试获取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上都能使用的解决方案。

enter image description here

编辑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();
}

0 个答案:

没有答案