轉自豆子空間
使用QFileDialog有兩種方法,一種是比較簡單的使用“靜態函數法”,另一種是可以自定義各個細節的“構造函數法”。
靜態函數法##
修改MainWindow的open函數:
#include <QFileDialog>
......
QString path = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files(*.jpg *.png)"));
if(path.length() == 0) {
QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files."));
} else {
QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path);
}
QString QFileDialog::getOpenFileName (
QWidget * parent = 0,
const QString & caption = QString(),
const QString & dir = QString(),
const QString & filter = QString(),
QString * selectedFilter = 0,
Options options = 0 )
- 第一個參數parent,用於指定父組件。注意,很多Qt組件的構造函數都會有這么一個parent參數,並提供一個默認值0;
- 第二個參數caption,是對話框的標題;
- 第三個參數dir,是對話框顯示時默認打開的目錄,"." 代表程序運行目錄,"/" 代表當前盤符的根目錄(Windows,Linux下/就是根目錄了),也可以是平台相關的,比如"C:\"等;
- 第四個參數filter,是對話框的后綴名過濾器,比如我們使用"Image Files(.jpg .png)"就讓它只能顯示后綴名是jpg或者png的文件。如果需要使用多個過濾器,使用";;"分割,比如"JPEG Files(.jpg);;PNG Files(.png)";
- 第五個參數selectedFilter,是默認選擇的過濾器;
- 第六個參數options,是對話框的一些參數設定,比如只顯示文件夾等等,它的取值是enum QFileDialog::Option,每個選項可以使用 | 運算組合起來。
QFileDialog提供了很多靜態函數,用於獲取用戶選擇的文件。這里我們使用的是getOpenFileName(), 也就是“獲取打開文件名”。
getSaveFileName() 保存本地文件對話框。
getOpenFileNames() 獲取多個本地文件。
getExistingDirectory() 只獲取文件夾。
構造函數法-自定義細節##
修改MainWindow的open函數:
QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setWindowTitle(tr("Open Image"));
fileDialog->setDirectory(".");
fileDialog->setFilter(tr("Image Files(*.jpg *.png)"));
if(fileDialog->exec() == QDialog::Accepted) {
QString path = fileDialog->selectedFiles()[0];
QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path);
} else {
QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files."));
}
不過,這兩種寫法雖然功能差別不大,但是彈出的對話框卻並不一樣。getOpenFileName()函數在Windows和MacOS X平台上提供的是本地的對話框,而QFileDialog提供的始終是Qt自己繪制的對話框(還記得前面說過,Qt的組件和Swing類似,也是自己繪制的,而不都是調用系統資源API)。
為了說明QFileDialog::getOpenFileName()函數的用法,還是先把函數簽名放在這里: