2017-09-27 83 views
1

我有幾個窗口標誌爲WindowStaysonTopHint的對話框。當我打開QFileDialog時,它顯示在這些對話框的底部。如何設置QFileDialog的窗口標誌。我使用下面的代碼來顯示頂部的對話框,但它不起作用。QFile對話框不顯示在頂部

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

回答

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(); 
+0

你可以讓我知道QFileDialogArgs的包含文件,因爲我得到一個錯誤不完整的類型是不允許的?我試過qfiledialog_p.h,但它說沒找到。 – Veera

+0

這部分代碼似乎是Qt私有的(因此後綴爲_p.h),但您應該通過使用其他構造函數來獲得相同的效果。我會更新答案。 –

+0

這將是偉大的! – Veera