<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                #(15):標準對話框 QMessageBox 所謂標準對話框,是 Qt 內置的一系列對話框,用于簡化開發。事實上,有很多對話框都是通用的,比如打開文件、設置顏色、打印設置等。這些對話框在所有程序中幾乎相同,因此沒有必要在每一個程序中都自己實現這么一個對話框。 Qt 的內置對話框大致分為以下幾類: * `QColorDialog`:選擇顏色; * `QFileDialog`:選擇文件或者目錄; * `QFontDialog`:選擇字體; * `QInputDialog`:允許用戶輸入一個值,并將其值返回; * `QMessageBox`:模態對話框,用于顯示信息、詢問問題等; * `QPageSetupDialog`:為打印機提供紙張相關的選項; * `QPrintDialog`:打印機配置; * `QPrintPreviewDialog`:打印預覽; * `QProgressDialog`:顯示操作過程。 這里我們簡單地介紹一下標準對話框`QMessageBox`的使用。在前面有了關于對話框的基礎之上,應該可以結合文檔很輕松地學習如何使用 Qt 的標準對話框。其它種類的標準對話框,我們將在后面的章節中再一一介紹。 `QMessageBox`用于顯示消息提示。我們一般會使用其提供的幾個 static 函數: * `void about(QWidget * parent, const QString & title, const QString & text)`:顯示關于對話框。這是一個最簡單的對話框,其標題是 title,內容是 text,父窗口是 parent。對話框只有一個 OK 按鈕。 * `void aboutQt(QWidget * parent, const QString & title = QString())`:顯示關于 Qt 對話框。該對話框用于顯示有關 Qt 的信息。 * `StandardButton critical(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)`:顯示嚴重錯誤對話框。這個對話框將顯示一個紅色的錯誤符號。我們可以通過 buttons 參數指明其顯示的按鈕。默認情況下只有一個 Ok 按鈕,我們可以使用`StandardButtons`類型指定多種按鈕。 * `StandardButton information(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)`:`QMessageBox::information()`函數與`QMessageBox::critical()`類似,不同之處在于這個對話框提供一個普通信息圖標。 * `StandardButton question(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton)`:`QMessageBox::question()`函數與`QMessageBox::critical()`類似,不同之處在于這個對話框提供一個問號圖標,并且其顯示的按鈕是“是”和“否”兩個。 * `StandardButton warning(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)`:`QMessageBox::warning()`函數與`QMessageBox::critical()`類似,不同之處在于這個對話框提供一個黃色嘆號圖標。 我們可以通過下面的代碼來演示下如何使用`QMessageBox`。 ~~~ 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 指針)。`QMessageBox`是`QDialog`的子類,這意味著它的初始顯示位置將會是在 parent 窗口的中央(我們在前面的章節中提到過這一點)。第二個參數是對話框的標題。第三個參數是我們想要顯示的內容。這里就是我們需要詢問的文字。下面,我們使用或運算符(|)指定對話框應該出現的按鈕。這里我們希望是一個 Yes 和一個 No。最后一個參數指定默認選擇的按鈕。這個函數有一個返回值,用于確定用戶點擊的是哪一個按鈕。按照我們的寫法,應該很容易的看出,這是一個模態對話框,因此我們可以直接獲取其返回值。如果返回值是 Yes,也就是說用戶點擊了 Yes 按鈕,我們顯示一個普通消息對話框,顯示“I’m glad to hear that!”,否則則顯示“I’m sorry!”。運行一下我們的程序片段,就可以看到其中的不同: [![](https://box.kancloud.cn/2015-12-29_5682324812b25.png)](http://files.devbean.net/images/2012/09/qmessagebox-demo.png) `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`實例。我們設置其主要文本信息為“The document has been modified.”,informativeText 則是會在對話框中顯示的簡單說明文字。下面我們使用了一個`detailedText`,也就是詳細信息,當我們點擊了詳細信息按鈕時,對話框可以自動顯示更多信息。我們自己定義的對話框的按鈕有三個:保存、丟棄和取消。然后我們使用了`exec()`是其成為一個模態對話框,根據其返回值進行相應的操作。 同時在 KDE 和 Windows 7 上編譯運行一下上面的代碼,我們可以看到一些區別: [![](https://box.kancloud.cn/2015-12-29_5682324824e94.png)](http://files.devbean.net/images/2012/09/qmessagebox-demo-kde.png) [![](https://box.kancloud.cn/2015-12-29_5682324837949.png)](http://files.devbean.net/images/2012/09/qmessagebox-demo-win7.png) 除去對話框樣式,我們值得注意的是`QMessageBox`下方按鈕的排列順序。KDE 上是 Show Details…、Save、Discard 和 Cancel;而 Windows 7 上則是 Save、Discard、Show Details… 和 Cancel。我們并沒有指定按鈕的順序,Qt 已經幫我們按照不同平臺的使用習慣對其進行了調整。這一點在 Mac OS 上也會有相應的體現。對于一個普通的`QDialog`而言,Qt 使用的是`QDialogButtonBox`這個類來實現不同平臺的對話框按鈕順序的顯示的。更多細節請參考這個類的文檔。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看