C++ QFile对话框没有';不要在顶部显示

C++ QFile对话框没有';不要在顶部显示,c++,qt,qfiledialog,C++,Qt,Qfiledialog,我有几个窗口标志为WindowStaysonTopHint的对话框。当我打开QFileDialog时,它显示在这些对话框的底部。如何为QFileDialog设置窗口标志。我使用以下代码在顶部显示对话框,但它不起作用 > QFileDialog *dialog=new QFileDialog(this); > > dialog->setWindowModality(Qt::ApplicationModal); > > dialog->setModal(

我有几个窗口标志为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);

QFileDialog::getExistingDirectory()
是一个静态函数,这意味着不会在实例
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
的设置。它可能看起来像这样(尚未测试):


您能告诉我QFileDialogArgs的包含文件,因为我得到一个错误,不允许使用不完整类型吗?我试过qfiledialog_p.h,但它说找不到。这部分代码似乎是Qt私有的(因此后缀为_p.h),但使用另一个构造函数应该会得到同样的效果。我会更新答案。那太好了!
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();