2011-01-24 95 views
0

我使用的外觀很喜歡這個QFiledialog返回不正確的目錄

QDir lastDir; 
QFileDialog dial(this); 

dial.getOpenFileName(this, 
        tr("Open File"), 
        QString("/home"), 
        tr("Raw Images (*.nef *.NEF *.dng *.DNG)")); 

lastDir = dial.directory(); 
qDebug() << lastDir; 

輸出的一個片段,是完全錯誤的,不管我在結束的目錄了。但是,不正確的目錄總是相同。

AFAICT我在這裏沒有做錯任何事。這裏發生了什麼?歡呼聲

+0

嗯,應該閱讀文檔更接近。 「返回當前在對話框中顯示的目錄。」奇怪的是,它返回一個我從未看過的目錄。 – regomodo 2011-01-24 23:08:02

回答

3

getOpenFileName()是一個靜態函數,它立即打開一個「文件選取器」對話框,並在用戶完成對話時返回「用戶選擇的現有文件」。您可以使用它像這樣(請注意使用的::和類名QFileDialog而不是對象名稱):

QString fileName = QFileDialog::getOpenFileName(this, 
       tr("Open File"), 
       QString("/home"), 
       tr("Raw Images (*.nef *.NEF *.dng *.DNG)")); 

directory()是非靜態的,並返回「當前顯示的對話框中的目錄」。這個函數是爲了在對話框仍然打開的時候被調用的,它被用於靜態調用沒有涉及的用例。


這裏發生的事情是你必須實例化一個對象,它稱爲靜態函數(這不會影響其狀態),然後叫directory()這將只是反映對象的原始狀態,這可能是工作目錄。相反,您需要將getOpenFileName()調用的返回值存儲在一個變量中,如上所示。

如果你想讓用戶選擇一個目錄,你可以考慮使用getExistingDirectory()來代替。另外,如果你想從文件名中提取目錄,QDir類有一些有用的功能。

+0

謝謝,閱讀完文檔後,我意識到自己的錯誤。我所追求的是對話查看目錄的qdir/qstring。最後,我只使用了_getOpenFileName_返回的QString並剪下了文件名。這樣下次我打開filedialog時,我回到了最後一個文件夾。奇怪的是,當我的工作目錄是「/ media/data/Projects/C++/rawviewer /」時,_directory_的目錄是「/ media/data/Projects/python/Gereqi/icons」。奇怪的。 – regomodo 2011-01-25 00:10:45