【问题标题】:QMainWindow goes background after using QFileDialog使用 QFileDialog 后 QMainWindow 进入后台
【发布时间】: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 模式。它将帮助您避免主窗口消失

标签: qt qmainwindow qfiledialog


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多