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();
你可以讓我知道QFileDialogArgs的包含文件,因爲我得到一個錯誤不完整的類型是不允許的?我試過qfiledialog_p.h,但它說沒找到。 – Veera
這部分代碼似乎是Qt私有的(因此後綴爲_p.h),但您應該通過使用其他構造函數來獲得相同的效果。我會更新答案。 –
這將是偉大的! – Veera