Qt——消息對話框的設計


1.消息對話框是什么

消息對話框(MessageBox)提供了一個模態對話框,用來通知用戶某些信息,或者用來詢問用戶一個問題並獲得一個答復。

先看下面2張圖——

第一張圖是網易雲音樂的界面截圖,在刪除歌單時,防止用戶誤操作,彈出了一個提示,提醒用戶確認刪除歌單;

第二張圖是Photoshop中,用戶輸入的顏色值不合法之后彈出的提示框,告知用戶輸入的顏色值要求在000000和ffffff直接。

由此大概可以知道消息對話框有哪些作用了,它可以作為刪除保護框,或提示用戶某些信息等等。

在Qt中有一個QMessageBox類,功能很全面,但缺點是用戶很難甚至無法在它的基礎上設置自己想要的界面樣式。

所以有必要自己設計一個消息對話框了。

2.設計思路

先看一下最后的界面需要做成什么樣子:

一個刪除保護的對話框,它包括下面幾個部分:標題、關閉按鈕、內容文字、確定和刪除按鈕。

按照使用qt做界面的一般方法,就是建立信號槽,然后點擊按鈕時發出信號作出響應,但是這樣做有一個很大的缺點:寫代碼時必須要把確定或取消后的操作寫到相應的槽函數里。也就是在一個函數中打開對話框,在另一個函數里進行操作,很不方便。

在Qt中QMessageBox有如下用法:

int ret = QMessageBox::warning(this, tr("My Application"),
                               tr("The document has been modified.\n"
                                  "Do you want to save your changes?"),
                               QMessageBox::Save | QMessageBox::Discard
                               | QMessageBox::Cancel,
                               QMessageBox::Save);

switch (ret) {
  case QMessageBox::Save:
      // Save was clicked
      break;
  case QMessageBox::Discard:
      // Don't Save was clicked
      break;
  case QMessageBox::Cancel:
      // Cancel was clicked
      break;
  default:
      // should never be reached
      break;
}

調用靜態函數打開對話框。對話框是模態的,用戶點擊確定或取消等按鈕之后界面關閉,並獲得一個返回值ret,根據返回值進行后續的操作。

3.具體實現

定義一個 靜態函數 ,在靜態函數中創建並顯示消息對話框。

然后用 QEventLoop 使程序停止執行后面的代碼。

用戶點擊確定或取消按鈕之后退出eventloop,返回一個值並關閉對話框。

使用方法如下:

SimpleMsgBox::ButtonRole role = SimpleMsgBox::warning(this, "刪除", "確定刪除?");
if (role = SimpleMsgBox::Yes)
{
	//...
}
else
{
	//...
}

 

在此基礎上,可以繼續擴展,使它的功能更豐富。

the end.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM