2015-04-27 39 views
1

我想用qt編程一個瀏覽按鈕,打開一個標準的查找文件對話框。如果用戶在對話框中輸入新文件名,我想創建該文件。如果文件存在,我想打開它。QFileDialog:使用getOpenFileName允許不存在的文件

我有一個函數,給定一個字符串將做出該決定。但是,如果文件不存在,QFileDialog::getOpenFileName會向用戶顯示錯誤,並且QFileDialog::getSaveFileName要求用戶確認是否覆蓋該文件(如果該文件存在的話,我不會這樣做,因此不應顯示)。

是否有一個qt標準可以滿足我的需求,而不需要創建一個自定義類從QFileDialog繼承或訴諸另一個類似毛茸茸的情況?

這裏是我當前工作的代碼,以意外的行爲......

void Login::browseFile() { 
    QString file = ui->txtFile->text(); 
    if (file.isEmpty()) { file = QDir::homePath(); } 
    file = QFileDialog::getOpenFileName(this, 
     tr("Select Monage Database"), file, 
     tr("Database Files (*.db)")); 

    if (!file.isEmpty()) { OpenDb(file); } 
} 

回答

1

谷歌讓我失望,但幾分鐘審議的文檔,我發現this

QFileDialog: :DontConfirmOverwrite 0x00000004如果選擇現有文件,請勿確認。默認情況下請求確認。

我能夠使用這個爲getSaveFileName來實現我想要的功能。我不得不指定選項selectedFilter,但只是通過了默認0

修改後的代碼:

void Login::browseFile() { 
    QString file = ui->txtFile->text(); 
    if (file.isEmpty()) { file = QDir::homePath(); } 
    file = QFileDialog::getSaveFileName(this, 
     tr("Select Monage Database"), file, 
     tr("Database Files (*.db)"), 0, 
     QFileDialog::DontConfirmOverwrite); 

    if (!file.isEmpty()) { OpenDb(file); } 
} 
相關問題