2014-03-31 95 views
0

當我啓動程序時,filedialog位於某個目錄中。然後我移動到其他目錄並選擇一些文件。一旦文件被選中,我嘗試從當前目錄中選擇文件。但它不會將當前目錄返回給我,它會將程序啓動時最初使用的原始目錄返回給我。代碼片段如下:爲什麼QFileDiaglog方法目錄不顯示當前目錄?

QFileDialog * fileDialog = new QFileDialog(this); 
fileDialog->setFileMode(QFileDialog::ExistingFiles); 
QListView* list = fileDialog->findChild<QListView*>("listView"); 
if(list) 
{ 
    list->setSelectionMode(QAbstractItemView::MultiSelection); 
} 
QTreeView* tree = fileDialog->findChild<QTreeView*>(); 
if(tree) 
{ 
    tree->setSelectionMode(QAbstractItemView::MultiSelection); 
} 
if(fileDialog->exec()) 
{ 
    if(fileDialog->selectedFiles().size()>0) 
    { 
     QDir dir = fileDialog->directory(); 
     fileDialog->update(); 
     qDebug()<<dir.absolutePath(); 
    } 
} 

你能說我在做什麼錯誤嗎?如何獲得fieldialog當前所在目錄的絕對路徑?

+0

您有使用這種複雜方法的原因,而不是[一次調用靜態方法嗎?](http://qt-project.org/doc/qt-5/qfiledialog.html#getOpenFileNames) – Bowdzone

+0

爲什麼你認爲你需要搞亂文件對話框的內部實現,只是爲了選擇多個文件?這段代碼看起來不可惡嗎?不要介意文件對話框名義上沒有內部的Qt實現 - 你可能運行在一個系統上,但是在Windows和OS X上,這都是名義上的情況。 'setFileMode(QFileDialog :: ExistingFiles)'就足夠了。爲什麼你需要這些其他黑客? –

+0

你爲什麼不介意它是什麼目錄?只要返回的文件具有絕對路徑,或者相對於'directory()'的相對路徑,你就可以,不需要關心它的確切目錄。 –

回答

1

QFileDialog有幾個靜態方法可以返回選定的文件和當前目錄getExistingDirectory,getOpenFileName,getOpenFileNames,getSaveFileName。您可能想要使用這些靜態函數之一。另一個選項是繼承QFileDialog並覆蓋exec方法以返回當前目錄。 http://qt-project.org/doc/qt-4.8/qfiledialog.html

0

你可以用其他人的靜態方法替換它,但我認爲首先你應該修復內存泄漏!

請注意,它代碼您正在創建一個新的QFileDialog這就是爲什麼你每次都得到相同的目錄。您只能使用該對話框一次,並在使用this對象(可能是主窗口)時將其刪除。

因此,無論是使用靜態版本還是在您的主窗口類中創建一個字段,並只創建一個對話框並在需要時重新使用它。

相關問題