最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、概念介紹

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

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

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

二、代碼示例

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

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

注意包含頭文件QPushButton以及QDialog

15

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

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

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

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

16

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

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

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

dlg->setAttribute(Qt::WA_DeleteOnClose);

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

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

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

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

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

相關(guān)文章

最新評論

宾川县| 海晏县| 赣州市| 赤壁市| 平乡县| 临澧县| 吉林省| 布尔津县| 留坝县| 辽源市| 郴州市| 桂阳县| 新竹市| 桃园市| 武强县| 肇州县| 道真| 和田县| 县级市| 三江| 留坝县| 晴隆县| 扶风县| 卫辉市| 磐安县| 高清| 定西市| 贡觉县| 奉贤区| 精河县| 营山县| 沂南县| 阳曲县| 沅陵县| 镇安县| 西华县| 灵武市| 双牌县| 武功县| 同心县| 霍林郭勒市|