99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Qt 標準對話框之 QMessageBox

2018-10-05 14:50 更新

Qt 學習之路(17): Qt 標準對話框之 QMessageBox

好久沒有更新博客,主要是公司里面還在驗收一些東西,所以沒有及時更新。而且也在寫一個基于 Qt 的畫圖程序,基本上類似于 PS 的東西,主要用到的是 Qt Graphics View Framework。好了,現(xiàn)在還是繼續(xù)來說說 Qt 的標準對話框吧!

這次來說一下 QMessageBox 以及類似的幾種對話框。其實,我們已經(jīng)用過 QMessageBox 了,就在之前的幾個程序中。不過,當時是大略的說了一下,現(xiàn)在專門來說說這幾種對話框。

先來看一下最熟悉的 QMessageBox::information。我們在以前的代碼中這樣使用過:

QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);

下面是一個簡單的例子:

現(xiàn)在我們從 API 中看看它的函數(shù)簽名:

static StandardButton QMessageBox::information ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );

首先,它是 static 的,所以我們能夠使用類名直接訪問到(怎么看都像廢話…);然后看它那一堆參數(shù),第一個參數(shù) parent,說明它的父組件;第二個參數(shù) title,也就是對話框的標題;第三個參數(shù) text,是對話框顯示的內(nèi)容;第四個參數(shù) buttons,聲明對話框放置的按鈕,默認是只放置一個 OK 按鈕,這個參數(shù)可以使用或運算,例如我們希望有一個 Yes 和一個 No 的按鈕,可以使用 QMessageBox::Yes | QMessageBox::No,所有的按鈕類型可以在 QMessageBox 聲明的 StandarButton 枚舉中找到;第五個參數(shù) defaultButton 就是默認選中的按鈕,默認值是 NoButton,也就是哪個按鈕都不選中。這么多參數(shù),豆子也是記不住的??!所以,我們在用 QtCreator 寫的時候,可以在輸入QMessageBox::information 之后輸入(,稍等一下,QtCreator 就會幫我們把函數(shù)簽名顯示在右上方了,還是挺方便的一個功能!

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()函數(shù)是沒有后兩個關于 button 設置的按鈕的!

QMessageBox 對話框的文本信息時可以支持 HTML 標簽的。例如:

QMessageBox::about(NULL, "About", "About this <font color='red'>application</font>");

運行效果如下:

如果我們想自定義圖片的話,也是很簡單的。這時候就不能使用這幾個 static 的函數(shù)了,而是要我們自己定義一個 QMessagebox 來使用:

QMessageBox message(QMessageBox::NoIcon, "Title", "Content with icon."); 
message.setIconPixmap(QPixmap("icon.png")); 
message.exec();

這里我們使用的是 exec()函數(shù),而不是 show(),因為這是一個模態(tài)對話框,需要有它自己的事件循環(huán),否則的話,我們的對話框會一閃而過哦(感謝 laetitia 提醒).

需要注意的是,同其他的程序類似,我們在程序中定義的相對路徑都是要相對于運行時的.exe 文件的地址的。比如我們寫"icon.png",意思是是在.exe 的當前目錄下尋找一個"icon.png"的文件。這個程序的運行效果如下:

還有一點要注意,我們使用的是 png 格式的圖片。因為 Qt 內(nèi)置的處理圖片格式是 png,所以這不會引起很大的麻煩,如果你要使用 jpeg 格式的圖片的話,Qt 是以插件的形式支持的。在開發(fā)時沒有什么問題,不過如果要部署的話,需要注意這一點。

最后再來說一下怎么處理對話框的交互。我們使用 QMessageBox 類的時候有兩種方式,一是使用static 函數(shù),另外是使用構造函數(shù)。

首先來說一下 static 函數(shù)的方式。注意,static 函數(shù)都是要返回一個 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"); 

如果要使用構造函數(shù)的方式,那么我們就要自己運行判斷一下啦:

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"); 
}

其實道理上也是差不多的。

本文出自 “豆子空間” 博客,請務必保留此出處 http://devbean.blog.51cto.com/448512/194031

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號