代码之家  ›  专栏  ›  技术社区  ›  HiddenWindshield

QFileDialog不允许父窗口更新

qt
  •  0
  • HiddenWindshield  · 技术社区  · 6 年前

    我正在尝试让一个QFileDialog来选择一个目录。但是,当对话框打开时,父窗口不会更新。它在保存拖动过它的任何其他窗口的图像的情况下执行此操作,并且在关闭对话框之前不会重新绘制。

    以下代码位于我的主窗口中的一个插槽中,与QPushButton的“clicked”信号相连:

    QFileDialog dlog(this);
    int result;
    
    ... set dialog to directories only ...
    
    result = dlog.exec();
    
    if (result == QDialog::Accepted) {
        ... blah blah blah ...
    }
    

    它根本不会真正影响功能,因为不管怎样,当对话框打开时,用户不能与窗口交互。只是一个恼人的视觉故障。

    enter image description here

    编辑2:下面是一个最小的、可验证的、完整的示例。这段代码用一个按钮创建一个窗口。单击该按钮将打开“文件”对话框。当对话框打开时,在主窗口上拖动任何窗口都会导致上面的屏幕截图所示的呆滞。关闭对话框会导致主窗口刷新,就像什么都没有发生一样。

    主窗口.h:

    #include <QMainWindow>
    #include <QPushButton>
    #include <QFileDialog>
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = 0);
    
    public slots:
        void handleclick();
    };
    

    主窗口.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();
    }
    

    #include "mainwindow.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
    
        return a.exec();
    }
    
    0 回复  |  直到 6 年前