【Qt开发】Qt标准对话框之QMessageBox
生活随笔
收集整理的這篇文章主要介紹了
【Qt开发】Qt标准对话框之QMessageBox
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
好久沒有更新博客,主要是公司里面還在驗收一些東西,所以沒有及時更新。而且也在寫一個基于Qt的畫圖程序,基本上類似于PS的東西,主要用到的是Qt Graphics View Framework。好了,現在還是繼續來說說Qt的標準對話框吧! 這次來說一下QMessageBox以及類似的幾種對話框。其實,我們已經用過QMessageBox了,就在之前的幾個程序中。不過,當時是大略的說了一下,現在專門來說說這幾種對話框。 先來看一下最熟悉的QMessageBox::information。我們在以前的代碼中這樣使用過: QMessageBox::information(NULL,?"Title",?"Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); 下面是一個簡單的例子: 現在我們從API中看看它的函數簽名: static?StandardButton QMessageBox::information ( QWidget * parent,?const?QString & title,?constQString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton ); 首先,它是static的,所以我們能夠使用類名直接訪問到(怎么看都像廢話…);然后看它那一堆參數,第一個參數parent,說明它的父組件;第二個參數title,也就是對話框的標題;第三個參數text,是對話框顯示的內容;第四個參數buttons,聲明對話框放置的按鈕,默認是只放置一個OK按鈕,這個參數可以使用或運算,例如我們希望有一個Yes和一個No的按鈕,可以使用QMessageBox::Yes |?QMessageBox::No,所有的按鈕類型可以在QMessageBox聲明的StandarButton枚舉中找到;第五個參數defaultButton就是默認選中的按鈕,默認值是NoButton,也就是哪個按鈕都不選中。這么多參數,豆子也是記不住的啊!所以,我們在用QtCreator寫的時候,可以在輸入QMessageBox::information之后輸入(,稍等一下,QtCreator就會幫我們把函數簽名顯示在右上方了,還是挺方便的一個功能! ? Qt提供了五個類似的接口,用于顯示類似的窗口。具體代碼這里就不做介紹,只是來看一下樣子吧! ? QMessageBox::critical(NULL,?"critical",?"Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); QMessageBox::warning(NULL,?"warning",?"Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); QMessageBox::question(NULL,?"question",?"Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); QMessageBox::about(NULL,?"About",?"About this application"); 請注意,最后一個about()函數是沒有后兩個關于button設置的按鈕的! QMessageBox對話框的文本信息時可以支持HTML標簽的。例如: QMessageBox::about(NULL,?"About",?"About this <font color='red'>application</font>"); 運行效果如下: 如果我們想自定義圖片的話,也是很簡單的。這時候就不能使用這幾個static的函數了,而是要我們自己定義一個QMessagebox來使用: QMessageBox message(QMessageBox::NoIcon,?"Title",?"Content with icon.");?
message.setIconPixmap(QPixmap("icon.png"));?
message.exec(); 這里我們使用的是exec()函數,而不是show(),因為這是一個模態對話框,需要有它自己的事件循環,否則的話,我們的對話框會一閃而過哦(感謝laetitia提醒).
需要注意的是,同其他的程序類似,我們在程序中定義的相對路徑都是要相對于運行時的.exe文件的地址的。比如我們寫"icon.png",意思是是在.exe的當前目錄下尋找一個"icon.png"的文件。這個程序的運行效果如下: 還有一點要注意,我們使用的是png格式的圖片。因為Qt內置的處理圖片格式是png,所以這不會引起很大的麻煩,如果你要使用jpeg格式的圖片的話,Qt是以插件的形式支持的。在開發時沒有什么問題,不過如果要部署的話,需要注意這一點。 最后再來說一下怎么處理對話框的交互。我們使用QMessageBox類的時候有兩種方式,一是使用static函數,另外是使用構造函數。 首先來說一下static函數的方式。注意,static函數都是要返回一個StandardButton,我們就可以通過判斷這個返回值來對用戶的操作做出相應。 QMessageBox::StandardButton rb = QMessageBox::question(NULL,?"Show Qt",?"Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);?
if(rb == QMessageBox::Yes)?
{?
????????QMessageBox::aboutQt(NULL,?"About Qt");?
} 如果要使用構造函數的方式,那么我們就要自己運行判斷一下啦: QMessageBox message(QMessageBox::NoIcon,?"Show Qt",?"Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, NULL);?
if(message.exec() == QMessageBox::Yes)?
{?
????????QMessageBox::aboutQt(NULL,?"About Qt");?
} 其實道理上也是差不多的。
message.setIconPixmap(QPixmap("icon.png"));?
message.exec(); 這里我們使用的是exec()函數,而不是show(),因為這是一個模態對話框,需要有它自己的事件循環,否則的話,我們的對話框會一閃而過哦(感謝laetitia提醒).
需要注意的是,同其他的程序類似,我們在程序中定義的相對路徑都是要相對于運行時的.exe文件的地址的。比如我們寫"icon.png",意思是是在.exe的當前目錄下尋找一個"icon.png"的文件。這個程序的運行效果如下: 還有一點要注意,我們使用的是png格式的圖片。因為Qt內置的處理圖片格式是png,所以這不會引起很大的麻煩,如果你要使用jpeg格式的圖片的話,Qt是以插件的形式支持的。在開發時沒有什么問題,不過如果要部署的話,需要注意這一點。 最后再來說一下怎么處理對話框的交互。我們使用QMessageBox類的時候有兩種方式,一是使用static函數,另外是使用構造函數。 首先來說一下static函數的方式。注意,static函數都是要返回一個StandardButton,我們就可以通過判斷這個返回值來對用戶的操作做出相應。 QMessageBox::StandardButton rb = QMessageBox::question(NULL,?"Show Qt",?"Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);?
if(rb == QMessageBox::Yes)?
{?
????????QMessageBox::aboutQt(NULL,?"About Qt");?
} 如果要使用構造函數的方式,那么我們就要自己運行判斷一下啦: QMessageBox message(QMessageBox::NoIcon,?"Show Qt",?"Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, NULL);?
if(message.exec() == QMessageBox::Yes)?
{?
????????QMessageBox::aboutQt(NULL,?"About Qt");?
} 其實道理上也是差不多的。
轉載于:https://www.cnblogs.com/huty/p/8518324.html
總結
以上是生活随笔為你收集整理的【Qt开发】Qt标准对话框之QMessageBox的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TestNG参数化测试
- 下一篇: WCF学习