2011-08-29 101 views
4

在Win32函數GetSaveFileName中使用的OPENFILENAME結構的lpstrDefExt成員是否等價?在QFileDialog中指定默認擴展名:: getSaveFileName

下面是從MSDN描述:

LPCTSTR lpstrDefExt

的默認擴展。如果用戶未能鍵入擴展名,則GetOpenFileName和GetSaveFileName會將此 擴展名附加到文件名。 此字符串可以是任意長度,但只有前三個字符是 追加。該字符串不應包含句點(。)。如果此成員 爲NULL且用戶未能鍵入擴展名,則不會附加 。

因此,如果lpstrDefExt設置爲「txt」,並且用戶鍵入「myfile」而不是「myfile.txt」,該函數仍會返回「myfile.txt」。

回答

6

的Qt將從「selectedFilter」參數提取默認的擴展,如果指定。

下面是一個例子:

QString filter = "Worksheet Files (*.abd)"; 
QString filePath = QFileDialog::getSaveFileName(GetQtMainFrame(), tr("Save Worksheet"), defaultDir, filter, &filter); 

當使用這種代碼,如果用戶沒有指定一個在對話框中則GetSaveFileName()方法將自動添加「.abd」文件擴展名。您可以在「qfiledialog_win.cpp」Qt源文件中的qt_win_get_save_file_name()中看到這個實現。

不幸的是,這對getOpenFileName()方法不起作用。

+0

這對我不起作用,我不能在文檔中提到這種用法。你能給我一個指針嗎? –

+0

這對我來說不起作用(Linux) – oLen

1

不知道究竟LPCTSTR lpstrDefExt正在試圖做的,但Qt文檔給出了下面的例子

QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), 
          "/home/jana/untitled.png", 
          tr("Images (*.png *.xpm *.jpg)")); 

http://doc.qt.io/qt-5/qfiledialog.html#getSaveFileName

+1

在Windows中,如果您從記事本中獲得「保存文件」對話框,並且只鍵入'a'而不是'a.txt',則創建的文件不會是'a'。 (即沒有擴展名),它將是'a.txt'。 – sashoalm

相關問題