程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Qt學習之路(15):Qt標准對話框之QFileDialog

Qt學習之路(15):Qt標准對話框之QFileDialog

編輯:關於C++

下面還是按照我們的進度,從Qt的標准對話框開始說起。所謂標准對話框,其實就是Qt內置的一些對話框,比如文件選擇、顏色選擇等等。今天首先介紹一下QFileDialog。

QFileDialog是Qt中用於文件打開和保存的對話框,相當於Swing裡面的JFileChooser。下面打開我們前面使用的工程。我們已經很有先見之明的寫好了一個打開的action,還記得前面的代碼嗎?當時,我們只是彈出了一個消息對話框(這也是一種標准對話框哦~)用於告知這個信號槽已經聯通,現在我們要寫真正的打開代碼了!

修改MainWindow的open函數:

void MainWindow::open()
{
 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);
 }
}

編譯之前別忘記include QFileDialog哦!然後運行一下吧!點擊打開按鈕,就會彈出打開對話框,然後選擇文件或者直接點擊取消,會有相應的消息提示。

QFileDialog提供了很多靜態函數,用於獲取用戶選擇的文件。這裡我們使用的是getOpenFileName(), 也就是“獲取打開文件名”,你也可以查看API找到更多的函數使用。不過,這個函數的參數蠻長的,而且類型都是QString,並不好記。考慮到這種情況,Qt提供了另外的寫法:

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()函數的用法,還是先把函數簽名放在這裡:

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,每個選項可以使用 | 運算組合起來。

如果我要想選擇多個文件怎麼辦呢?Qt提供了getOpenFileNames()函數,其返回值是一個QStringList。你可以把它理解成一個只能存放QString的List,也就是STL中的list<string>。

好了,我們已經能夠選擇打開文件了。保存也是類似的,QFileDialog類也提供了保存對話框的函數getSaveFileName,具體使用還是請查閱API。

出處:http://devbean.blog.51cto.com/448512/213414

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved