使用 QFileDialog 后 QMainWindow 进入后台

Posted

技术标签:

【中文标题】使用 QFileDialog 后 QMainWindow 进入后台【英文标题】:QMainWindow goes background after using QFileDialog 【发布时间】:2015-05-02 15:45:30 【问题描述】:

我有一个 Qt 应用程序,在单击按钮后会加载一些文件。我正在使用 QFileDialog 打开文件。每次我关闭文件对话框时,应用程序主窗口 (QMainWindow) 都位于所有其他打开的窗口(互联网浏览器、资源管理器等)之后。这是标准行为吗?有什么办法可以防止这种情况发生吗?我试过了

    // set always on top window
    Qt::WindowFlags flags = this->windowFlags();
    this->setWindowFlags(flags | Qt::WindowStaysOnTopHint);

但这会导致文件对话框也在主窗口后面。

编辑: 这是调用文件对话框的代码片段(调用它的方法是我的类LoadData的静态方法):

void MainWindow::on_buttonIP_clicked()

     loaded = LoadData::OpenFiles(IPFiles);


bool LoadData::openFiles(QStringList &fileNames)

    // open files dialog
    fileNames = QFileDialog::getOpenFileNames(0,
          tr("Open files"), "", "Text Files (*.txt *.dat *.points)");

    if (fileNames.isEmpty())
    
        return false;
    

    return true;

【问题讨论】:

使用 Qt::WindowStaysOnTopHint 是一个错误的解决方案,因为它会导致很多问题。您能否展示一下您是如何调用 QFileDialog(代码)的? 玩 Windows 模式。它将帮助您避免主窗口消失 【参考方案1】:

QFileDialog::getOpenFileNames 的第一个参数不能是nullptr。将其设置到您的主窗口,一切都会好起来的。

【讨论】:

以上是关于使用 QFileDialog 后 QMainWindow 进入后台的主要内容,如果未能解决你的问题,请参考以下文章

Qt QFileDialog 再次弹出

QFileDialog 不断重新打开

QFileDialog : 获取文件名

为啥 QFileDialog 使用斜杠而不是反斜杠?

QFileDialog - 用指定的文件名保存文件

带有默认目录的 QFileDialog