2015-06-16 21 views
1

我有一個繼承自QFileDialog的類。在構造函數中,我調用setDirectory並傳入訪問的最後一個目錄(該類跟蹤該目錄;請參閱下面的代碼)。在Windows上,這工作正常。如果我多次顯示對話框,它內部具有足夠的智能,可以在最後一個位置恢復(例如,用戶之前保存文件的位置)。這是所需的行爲。Qt QFileDialog :: setDirectory在Ubuntu中的有趣行爲12.04

另一方面,在Ubuntu 12.04(GCC 4.8編譯器)上,如果我多次撥打showFileDialog,系統不會自動恢復最後一次離開的位置。所以我嘗試在該函數中添加setDirectory調用,如下所述,但這並沒有改變任何內容。此外,如果我從構造函數中取出setDirectory,所以它只在showFileDialog中調用,文件對話框打開到運行程序的文件夾。 (即setDirectory不起作用)。隨後調用showFileDialog將打開一個文件對話框,從請求的目錄開始。

因此,看起來呼叫的效果有所延遲。這是一個Qt錯誤,還是我的?無論哪種方式,我怎樣才能讓setDirectory電話有效?

示例代碼:

QString FileDialog::defaultDir = QDir::homePath(); 

FileDialog::FileDialog(QWidget *parentWindow /*, ...*/) 
    : QFileDialog(parentWindow) 
{ 
    setDirectory(defaultDir); 
    //... 
} 

QString FileDialog::showFileDialog() 
{ 
    // Adding setDirectory(defaultDir) here doesn't help. 

    if(!exec()) 
    { 
     return QString::null; 
    } 

    defaultDir = directory().path(); 
    //... 
} 
+1

本機對話框可能有限制。嘗試使用'DontUseNativeDialog'選項。 –

+0

我忘了提及:我確實驗證了DontUseNativeDialog使它工作正常,但我更願意使用本機對話框來保持Ubuntu的感覺。 –

回答

0

它不是從上面你怎麼知道的路徑被改變代碼清晰。我不確定directory()是對此負責。

考慮使用void QFileDialog::directoryEntered(const QString & directory)信號。

+0

我通過查看文件對話框UI知道路徑,但現在我試着檢查該信號。 'directoryEntered'信號在打開對話框時報告當前目錄,然後每次移動到對話框中的其他文件夾。它似乎不是由調用'setDirectory'觸發的。 –

0

解決方法發現:

我碰巧設置對話框的標題(setWindowTitle())每次我打開一個FileDialog時間。如果我連接到QFileDialog::windowTitleChanged信號並在插槽內呼叫setDirectory,它是有效的。

雖然這是一個不直觀的解決方法,所以我打開更好的答案。