2010-04-09 53 views
7

我試圖簡單地保存一個文件。但是,我需要輸入一個沒有後綴的文件名來自動獲取默認後綴(setDefaultSuffix())。Qt QFileDialog - 只有靜態函數的本機對話框?

我寧願不完全失去了這個本地保存對話框而已。 exec()不會從QDialog中重載,所以它完全繞過原生鉤子(即使它是假的,也忽略DontUseNativeDialog選項)。

如果我禁用了文件覆蓋警告,並在函數返回後自己附加了默認後綴,那麼如果用戶不想覆蓋它,我會重新打開對話框......這很醜陋。

有一些信號,我能趕上並迅速注入的默認後綴,如果它不存在?我猜不是,因爲它是一個本機對話框。

有沒有我做錯了過濾器?我只有一個過濾器選擇。它應該使用該擴展名。

這看起來很蹩腳。啓動保存對話框,只需輸入「test」不應該導致擴展文件。 「測試」,是的。 「測試」沒辦法。當用戶點擊Load時,這會讓用戶感到困惑,並且無法看到他們剛剛保存的文件。

我猜的Qt跨平臺的一部分是給我最小公分母文件對話框的功能?

回答

5

是的,如果你看看Qt的源代碼,很明顯,只有靜態函數使用本機文件對話框。不幸的是,不可能以任何其他方式獲得本機對話框......不過,可能...

0

您是否嘗試過靜態函數中的過濾器選項? [編輯:哎呀,發現你已經有了]

我只是這個嘗試我自己,例如,事情似乎是相當合理的:

QString filter = "Text files (*.txt)"; 
QString selectedFilter; 
QString filename = QFileDialog::getSaveFileName(0, "", "", filter, &selectedFilter); 

進入測試在保存對話框返回test.txt
輸入測試。在保存對話框中返回test ..txt
進入test.foo在保存對話框返回test.foo

這些都表明適當的覆蓋對話框,如果已經有一個相同名稱的現有文件。

我能得到測試,沒有任何後綴的唯一方法,是用引號包圍它(「測試」),或者先進入*。*(這將使它顯示所有文件)然後輸入測試。 (儘管奇怪的是selectedFilter仍將包含對話框中顯示的過濾器,即使它未被使用)。

+0

也許這是一個平臺的事情。我的本地對話框是GTK(GNOME/Linux),你的是什麼? – darron 2010-04-09 17:50:02

+0

我的是Windows。猜猜這可能是差異所在。 – richardwb 2010-04-09 19:47:58