欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt專(zhuān)欄之模態(tài)與非模態(tài)對(duì)話框的實(shí)現(xiàn)

 更新時(shí)間:2021年04月06日 10:31:21   作者:至純?cè)O(shè)計(jì)  
這篇文章主要介紹了Qt專(zhuān)欄之模態(tài)與非模態(tài)對(duì)話框的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、概念介紹

什么是模態(tài)對(duì)話框和非模態(tài)對(duì)話框呢?我們?nèi)粘J褂密浖^(guò)程中很常見(jiàn)的現(xiàn)象,點(diǎn)擊某個(gè)軟件上某個(gè)按鈕會(huì)彈出對(duì)話框窗口,此時(shí)對(duì)于其他窗口而言:

可以同時(shí)對(duì)其他窗口進(jìn)行操作的稱(chēng)為非模態(tài)

不可以同時(shí),只能操作當(dāng)前彈出的窗口的稱(chēng)為模態(tài)。

二、代碼示例

2.1模態(tài)對(duì)話框示例代碼

/*在主類(lèi)對(duì)象的構(gòu)造函數(shù)中我們新建一個(gè)按鈕用于彈出對(duì)話框*/
QPushButton *btn = new QPushButton("new",this);
/*信號(hào)與槽的連接
槽函數(shù)通過(guò)Lambda表達(dá)式實(shí)現(xiàn)
主要功能實(shí)現(xiàn)了點(diǎn)擊一個(gè)new按鈕,彈出一個(gè)模態(tài)對(duì)話框
*/
connect(btn,&QPushButton::clicked,[=](){
QDialog dlg(this)  ;
dlg.exec(); 
});

注意包含頭文件QPushButton以及QDialog

15

2.2非模態(tài)對(duì)話框示例代碼

/*在主類(lèi)對(duì)象的構(gòu)造函數(shù)中我們新建一個(gè)按鈕用于彈出對(duì)話框*/
QPushButton *btn = new QPushButton("new",this);
/*信號(hào)與槽的連接,槽函數(shù)通過(guò)Lambda表達(dá)式實(shí)現(xiàn)
主要功能實(shí)現(xiàn)了點(diǎn)擊一個(gè)new按鈕,彈出一個(gè)非模態(tài)對(duì)話框
*/
connect(btn,&QPushButton::clicked,[=](){
QDialog *dlg = new QDialog(this) ;
dlg->show();
});

好奇,為什么是對(duì)話框,上面模態(tài)直接 QDialog dlg(this);而非模態(tài)就需要new呢?那是因?yàn)闃?gòu)造函數(shù)中在棧中聲明定義的變量在構(gòu)造函數(shù)運(yùn)行完成后,就會(huì)被回收。

因此,new一個(gè)對(duì)象實(shí)例,利用上的空間即可,可以試試兩種實(shí)現(xiàn)效果的不同,這邊我們演示的效果如下:

16

三、非模態(tài)下的內(nèi)存泄漏隱患

假設(shè)一下,在我們上述的非模態(tài)場(chǎng)景下,點(diǎn)擊按鈕new一個(gè)對(duì)象示例后,我們關(guān)掉對(duì)話框,由于使用空間,只要主窗口QObject未被析構(gòu)回收內(nèi)存,繼續(xù)點(diǎn)擊按鈕就會(huì)又創(chuàng)建一個(gè)新的對(duì)象實(shí)例,循環(huán)反復(fù)一直創(chuàng)建到達(dá)一定數(shù)量級(jí),就會(huì)導(dǎo)致堆溢出。

解決辦法就是使用setAttribute()設(shè)置屬性函數(shù),設(shè)置屬性值Qt::WA_DeleteOnClose,意思就是當(dāng)彈出的非模態(tài)對(duì)話框關(guān)閉,既刪除該對(duì)象內(nèi)存,以上面的例子添加如下代碼:

dlg->setAttribute(Qt::WA_DeleteOnClose);

四、標(biāo)準(zhǔn)對(duì)話框

標(biāo)準(zhǔn)對(duì)話框:Qt內(nèi)置了一系列對(duì)話框,用于簡(jiǎn)化開(kāi)發(fā)。事實(shí)上,有很多對(duì)話框都是通用的,比如打開(kāi)文件、設(shè)置顏色、打印設(shè)置等。這些對(duì)話框在所有程序中幾乎相同,因此沒(méi)有必要在每一個(gè)程序中都自己實(shí)現(xiàn)這么一個(gè)對(duì)話框。

Qt 的內(nèi)置對(duì)話框大致分為以下幾類(lèi):

  • QColorDialog:選擇顏色;
  • QFileDialog:選擇文件或者目錄;
  • QFontDialog:選擇字體;
  • QInputDialog:允許用戶輸入一個(gè)值,并將其值返回;
  • QMessageBox:模態(tài)對(duì)話框,用于顯示信息、詢問(wèn)問(wèn)題等;
  • QPageSetupDialog:為打印機(jī)提供紙張相關(guān)的選項(xiàng);
  • QPrintDialog:打印機(jī)配置;
  • QPrintPreviewDialog:打印預(yù)覽;
  • QProgressDialog:顯示操作過(guò)程。

到此這篇關(guān)于Qt專(zhuān)欄之模態(tài)與非模態(tài)對(duì)話框的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Qt 模態(tài)與非模態(tài)對(duì)話框內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ STL入門(mén)教程(3) deque雙向隊(duì)列使用方法

    C++ STL入門(mén)教程(3) deque雙向隊(duì)列使用方法

    這篇文章主要為大家詳細(xì)介紹了C++ STL入門(mén)教程第三篇,deque雙向隊(duì)列的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 一文詳解C++關(guān)鍵詞auto的用法

    一文詳解C++關(guān)鍵詞auto的用法

    在早期C/C++中auto的含義是:使用auto修飾的變量,是具有自動(dòng)存儲(chǔ)器的局部變量,但遺憾的是一直沒(méi)有人去使用它,在 C++11中,auto不再是一個(gè)存儲(chǔ)類(lèi)型指示符,而是作為一個(gè)新的類(lèi)型指示符來(lái)指示編譯器,本文將給大家詳細(xì)的介紹一下C++關(guān)鍵詞auto的用法,需要的朋友可以參考下
    2024-02-02
  • C語(yǔ)言基于回溯算法解決八皇后問(wèn)題的方法

    C語(yǔ)言基于回溯算法解決八皇后問(wèn)題的方法

    這篇文章主要介紹了C語(yǔ)言基于回溯算法解決八皇后問(wèn)題的方法,簡(jiǎn)單描述了八皇后問(wèn)題,并結(jié)合實(shí)例形式分析了C語(yǔ)言使用回溯算法解決八皇后問(wèn)題的相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • C語(yǔ)言鏈表完整操作演示

    C語(yǔ)言鏈表完整操作演示

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言鏈表的完整操作演示,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系

    C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系

    這篇文章主要介紹了C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • C/C++實(shí)現(xiàn)內(nèi)存泄漏檢測(cè)詳解

    C/C++實(shí)現(xiàn)內(nèi)存泄漏檢測(cè)詳解

    這篇文章主要為大家詳細(xì)介紹了c++進(jìn)行內(nèi)存泄漏檢測(cè)的方法,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下,希望能夠給你帶來(lái)幫助
    2023-02-02
  • 單元測(cè)試代碼覆蓋率解析

    單元測(cè)試代碼覆蓋率解析

    單元測(cè)試(unit testing),是指對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證。動(dòng)態(tài)分析就是通過(guò)觀察軟件運(yùn)行時(shí)的動(dòng)作,來(lái)提供執(zhí)行跟蹤,時(shí)間分析,以及測(cè)試覆蓋度方面的信息。下面我們來(lái)詳細(xì)了解下吧
    2019-06-06
  • C語(yǔ)言中利用封裝好的函數(shù)實(shí)現(xiàn)英文字母的大小寫(xiě)轉(zhuǎn)換

    C語(yǔ)言中利用封裝好的函數(shù)實(shí)現(xiàn)英文字母的大小寫(xiě)轉(zhuǎn)換

    這篇文章主要介紹了C語(yǔ)言中利用封裝好的函數(shù)實(shí)現(xiàn)英文字母的大小寫(xiě)轉(zhuǎn)換,需要的朋友可以參考下
    2017-10-10
  • C語(yǔ)言中全局變量,局部變量,靜態(tài)局部變量的區(qū)分方式

    C語(yǔ)言中全局變量,局部變量,靜態(tài)局部變量的區(qū)分方式

    這篇文章主要介紹了C語(yǔ)言中全局變量,局部變量,靜態(tài)局部變量的區(qū)分方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • C++之BOOST字符串查找示例

    C++之BOOST字符串查找示例

    這篇文章主要介紹了C++之BOOST字符串查找的方法,實(shí)例演示了boost針對(duì)字符串的查找、判定及替換等操作,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10

最新評(píng)論