QFile对话框不显示在顶部

时间:2017-09-27 08:26:54

标签: c++ qt qfiledialog

我有几个带窗口标志的Dialogs作为WindowStaysonTopHint。当我打开QFileDialog时,它会显示在这些对话框的底部。如何为QFileDialog设置窗口标志。我使用以下代码在顶部显示对话框,但它不起作用。

> QFileDialog *dialog=new QFileDialog(this);
> 
> dialog->setWindowModality(Qt::ApplicationModal);
> 
> dialog->setModal(true);
> dialog->setWindowFlags(Qt::WindowStaysonTopHint);
> dialog->getExisitngDirectory(this,tr("Directory"),"\home",QFileDialog::ShowDirsOnly);

1 个答案:

答案 0 :(得分:2)

QFileDialog::getExistingDirectory()是一个静态函数,这意味着它不会在实例dialog上调用,因为您的代码看起来如此。这也意味着您在dialog实例上调用的函数无效。

文档说明“getExistingDirectory()是一个便利函数......”因此,您可以通过使用QFileDialog的实例获得相同的效果。 getExistingDirectory()的源代码或多或少看起来像

QFileDialogArgs args;
args.parent = parent;
args.caption = caption;
args.directory = QFileDialogPrivate::workingDirectory(dir);
args.mode = (options & ShowDirsOnly ? DirectoryOnly : Directory);
args.options = options;
// create a qt dialog
QFileDialog dialog(args);
if (dialog.exec() == QDialog::Accepted) {
    return dialog.selectedFiles().value(0);
}
return QString();

因此,您必须执行类似操作并添加WindowFlags的设置。它可能看起来像这样(没有测试过):

QFileDialog dialog(parent, caption, directory, filter);
dialog.setFileMode(DirectoryOnly);

dialog.setWindowModality(Qt::ApplicationModal);
dialog.setModal(true);
dialog.setWindowFlags(Qt::WindowStaysonTopHint);

if (dialog.exec() == QDialog::Accepted) {
    return dialog.selectedFiles().value(0);
}
return QString();