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.