99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Qt 標(biāo)準(zhǔn)對話框之 QFileDialog

2018-10-05 14:46 更新

Qt 標(biāo)準(zhǔn)對話框之 QFileDialog

《Qt 學(xué)習(xí)之路》已經(jīng)寫到了第15篇,然而現(xiàn)在再寫下去卻有點(diǎn)困難,原因是當(dāng)初并沒有想到會連續(xù)的寫下去,因此并沒有很好的計劃這些內(nèi)容究竟該怎樣去寫。雖然前面說過,本教程主要線路參考《C++ Gui Programming with Qt 4, 2nd Edition》,然而最近的章節(jié)由于原文是一個比較完整的項目而有所改變,因此現(xiàn)在不知道該從何寫起。

我并不打算介紹很多組件的使用,因為 Qt 有很多組件,各種組件用法眾多,根本不可能介紹完,只能把API 放在手邊,邊用邊查。所以,對于很多組件我只是簡單的介紹一下,具體用法還請自行查找(確切地說,我知道的也并不多,很多時候還是要到 API 里面去找)。

下面還是按照我們的進(jìn)度,從 Qt 的標(biāo)準(zhǔn)對話框開始說起。所謂標(biāo)準(zhǔn)對話框,其實就是 Qt 內(nèi)置的一些對話框,比如文件選擇、顏色選擇等等。今天首先介紹一下 QFileDialog。

QFileDialog 是 Qt 中用于文件打開和保存的對話框,相當(dāng)于 Swing 里面的 JFileChooser。下面打開我們前面使用的工程。我們已經(jīng)很有先見之明的寫好了一個打開的 action,還記得前面的代碼嗎?當(dāng)時,我們只是彈出了一個消息對話框(這也是一種標(biāo)準(zhǔn)對話框哦~)用于告知這個信號槽已經(jīng)聯(lián)通,現(xiàn)在我們要寫真正的打開代碼了!

修改 MainWindow 的 open 函數(shù):

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 哦!然后運(yùn)行一下吧!點(diǎn)擊打開按鈕,就會彈出打開對話框,然后選擇文件或者直接點(diǎn)擊取消,會有相應(yīng)的消息提示。

QFileDialog 提供了很多靜態(tài)函數(shù),用于獲取用戶選擇的文件。這里我們使用的是 getOpenFileName(), 也就是“獲取打開文件名”,你也可以查看 API 找到更多的函數(shù)使用。不過,這個函數(shù)的參數(shù)蠻長的,而且類型都是 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()函數(shù)在Windows 和 MacOS X 平臺上提供的是本地的對話框,而 QFileDialog 提供的始終是 Qt 自己繪制的對話框(還記得前面說過,Qt 的組件和 Swing 類似,也是自己繪制的,而不都是調(diào)用系統(tǒng)資源API)。

為了說明 QFileDialog::getOpenFileName()函數(shù)的用法,還是先把函數(shù)簽名放在這里:

QString QFileDialog::getOpenFileName (
          QWidget * parent = 0,
          const QString & caption = QString(),
          const QString & dir = QString(),
          const QString & filter = QString(),
          QString * selectedFilter = 0,
          Options options = 0 )

第一個參數(shù) parent,用于指定父組件。注意,很多 Qt 組件的構(gòu)造函數(shù)都會有這么一個 parent 參數(shù),并提供一個默認(rèn)值0;

第二個參數(shù) caption,是對話框的標(biāo)題;

第三個參數(shù) dir,是對話框顯示時默認(rèn)打開的目錄,"." 代表程序運(yùn)行目錄,"/" 代表當(dāng)前盤符的根目錄(Windows,Linux下/就是根目錄了),也可以是平臺相關(guān)的,比如"C:\"等;

第四個參數(shù) filter,是對話框的后綴名過濾器,比如我們使用"Image Files(.jpg .png)"就讓它只能顯示后綴名是 jpg 或者 png 的文件。如果需要使用多個過濾器,使用";;"分割,比如"JPEG Files(.jpg);;PNG Files(.png)";

第五個參數(shù) selectedFilter,是默認(rèn)選擇的過濾器;

第六個參數(shù) options,是對話框的一些參數(shù)設(shè)定,比如只顯示文件夾等等,它的取值是 enum QFileDialog::Option,每個選項可以使用 | 運(yùn)算組合起來。

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

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

本文出自 “豆子空間” 博客,請務(wù)必保留此出處 http://devbean.blog.51cto.com/448512/194031

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號