學習自:https://www.devbean.net/2012/08/qt-study-road-2-catelog/
記錄學習筆記僅供自己學習使用,如有侵權,請聯系作者删除。
1.标準對話框
所謂标準對話框,是 Qt 内置的一系列對話框,用于簡化開發。 事實上,有很多對話框都是通用的,比如打開檔案、設定顔色、列印設定等。這些對話框在所有程式中幾乎相同,是以沒有必要在每一個程式中都自己實作這麼一個對話框。
Qt 的内置對話框大緻分為以下幾類:
- QColorDialog: 選擇顔色;
- QFileDialog: 選擇檔案或者目錄;
- QFontDialog: 選擇字型;
- QInputDialog: 允許使用者輸入一個值,并将其值傳回;
- QMessageBox: 模态對話框,用于顯示資訊、詢問問題等;
- QPageSetupDialog: 為列印機提供紙張相關的選項;
- QPrintDialog: 列印機配置;
- QPrintPreviewDialog: 列印預覽;
- QProgressDialog: 顯示操作過程。
2.模态對話框QMessageBox
QMessageBox用于顯示消息提示。 我們一般會使用其提供的幾個 static 函數:
-
顯示關于對話框。這是一個最簡單的對話框,其标題是 title,内容是 text,父視窗是 parent。對話框隻有一個 OK 按鈕。void about(QWidget * parent, const QString & title, const QString & text):
-
顯示關于 Qt 對話框。該對話框用于顯示有關 Qt 的資訊。void aboutQt(QWidget * parent, const QString & title = QString()):
-
顯示嚴重錯誤對話框。這個對話框将顯示一個紅色的錯誤符号。我們可以通過 buttons 參數指明其顯示的按鈕。預設情況下隻有一個 Ok 按鈕,我們可以使用StandardButtons類型指定多種按鈕。StandardButton critical(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton):
-
QMessageBox::information()函數與QMessageBox::critical()類似,不同之處在于這個對話框提供一個普通資訊圖示。StandardButton information(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton):
-
QMessageBox::question()函數與QMessageBox::critical()類似,不同之處在于這個對話框提供一個問号圖示,并且其顯示的按鈕是“是”和“否”兩個。StandardButton question(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton):
-
QMessageBox::warning()函數與QMessageBox::critical()類似,不同之處在于這個對話框提供一個黃色歎号圖示。StandardButton warning(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton):
如,使用如下代碼實作一個詢問對話框和普通消息對話框:
if (QMessageBox::Yes == QMessageBox::question(this,
tr("Question"),
tr("Are you OK?"),
QMessageBox::Yes | QMessageBox::No,
QMessageBox::Yes)) {
QMessageBox::information(this, tr("Hmmm..."), tr("I'm glad to hear that!"));
} else {
QMessageBox::information(this, tr("Hmmm..."), tr("I'm sorry!"));
}
使用QMessageBox::question()來詢問一個問題。這個對話框的父視窗是 this,也就是我們的 MainWindow(或者其他 QWidget 指針)。第一個參數this表示QMessageBox是QDialog的子類,這意味着它的初始顯示位置将會是在 parent 視窗的中央。第二個參數是對話框的标題。第三個參數 是我們想要顯示的内容。這裡就是我們需要詢問的文字。下面,我們使用或運算符(|)指定對話框應該出現的按鈕。這裡我們希望是一個 Yes 和一個 No。 最後一個參數 指定預設選擇的按鈕。這個函數有一個傳回值,用于确定使用者點選的是哪一個按鈕。按照我們的寫法,應該很容易的看出,這是一個模态對話框,是以我們可以直接擷取其傳回值。如果傳回值是 Yes,也就是說使用者點選了 Yes 按鈕,我們顯示一個普通消息對話框,顯示“I’m glad to hear that!”,否則則顯示“I’m sorry!”。
QMessageBox類的 static 函數優點是友善使用,缺點也很明顯:非常不靈活。我們隻能使用簡單的幾種形式。為了能夠定制QMessageBox細節,我們必須使用QMessageBox的屬性設定 API。 如果我們希望制作一個詢問是否儲存的對話框,我們可以使用如下的代碼:
QMessageBox msgBox;
msgBox.setText(tr("The document has been modified."));
msgBox.setInformativeText(tr("Do you want to save your changes?"));
msgBox.setDetailedText(tr("Differences here..."));
msgBox.setStandardButtons(QMessageBox::Save
| QMessageBox::Discard
| QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Save:
qDebug() << "Save document!";
break;
case QMessageBox::Discard:
qDebug() << "Discard changes!";
break;
case QMessageBox::Cancel:
qDebug() << "Close document!";
break;
}
msgBox 是一個建立在棧上的QMessageBox執行個體。我們設定其主要文本資訊setText() 為“The document has been modified.”,setInformativeText() 則是會在對話框中顯示的簡單說明文字。下面我們使用了一個setDetailedText(),也就是詳細資訊,當我們點選了詳細資訊按鈕時,對話框可以自動顯示更多資訊。我們自己定義的對話框的按鈕有三個:儲存、丢棄和取消。然後我們使用了exec()是其成為一個模态對話框,根據其傳回值進行相應的操作。
QMessageBox下方按鈕的排列順序是: Save、Discard、Show Details… 和 Cancel。我們并沒有指定按鈕的順序,Qt 自動幫我們按照不同平台的使用習慣對按鈕順序進行調整。
