日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Qt之模式、非模式、半模式对话框

發(fā)布時(shí)間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt之模式、非模式、半模式对话框 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于“模式”和“非模式”對(duì)話框,相信大家都比較熟悉,但其中有一個(gè)可能很多人都比較陌生,介于兩者之間的狀態(tài),我們稱之為“半模式“。

模式對(duì)話框

描述

阻塞同一應(yīng)用程序中其它可視窗口輸入的對(duì)話框。模式對(duì)話框有自己的事件循環(huán),用戶必須完成這個(gè)對(duì)話框中的交互操作,并且關(guān)閉了它之后才能訪問(wèn)應(yīng)用程序中的其它任何窗口。模式對(duì)話框僅阻止訪問(wèn)與對(duì)話相關(guān)聯(lián)的窗口,允許用戶繼續(xù)使用其它窗口中的應(yīng)用程序。

顯示模態(tài)對(duì)話框最常見的方法是調(diào)用其exec()函數(shù),當(dāng)用戶關(guān)閉對(duì)話框,exec()將提供一個(gè)有用的返回值,并且這時(shí)流程控制繼續(xù)從調(diào)用exec()的地方進(jìn)行。通常情況下,要獲得對(duì)話框關(guān)閉并返回相應(yīng)的值,我們連接默認(rèn)按鈕,例如:”確定”按鈕連接到accept()槽,”取消”按鈕連接到reject()槽。另外我們也可以連接done()槽,傳遞給它Accepted或Rejected。

效果

源碼

MainWindow *pMainWindow = new MainWindow(); pMainWindow->setWindowTitle(QStringLiteral("主界面")); pMainWindow->show();CustomWindow *pDialog = new CustomWindow(pMainWindow); pDialog->setWindowTitle(QStringLiteral("模式對(duì)話框"));// 關(guān)鍵代碼 pDialog->exec();// 關(guān)閉模態(tài)對(duì)話框以后才會(huì)執(zhí)行下面的代碼 pMainWindow->setWindowTitle(QStringLiteral("主界面-模式對(duì)話框")); qDebug() << QStringLiteral("關(guān)閉模態(tài)對(duì)話框以后,可以繼續(xù)向下執(zhí)行")
  • 主界面被阻塞,不能進(jìn)行點(diǎn)擊、拖動(dòng)等任何操作。
  • exec()之后的代碼不會(huì)執(zhí)行,直到關(guān)閉模態(tài)對(duì)話框。
  • 非模式對(duì)話框

    描述

    和同一個(gè)程序中其它窗口操作無(wú)關(guān)的對(duì)話框。在文字處理中的查找和替換對(duì)話框通常是非模式的,允許用戶同時(shí)與應(yīng)用程序的主窗口和對(duì)話框進(jìn)行交互。調(diào)用show()來(lái)顯示非模式對(duì)話框,并立即將控制返回給調(diào)用者。

    如果隱藏對(duì)話框后調(diào)用show()函數(shù),對(duì)話框?qū)@示在其原始位置,這是因?yàn)榇翱诠芾砥鳑Q定的窗戶位置沒(méi)有明確由程序員指定,為了保持被用戶移動(dòng)的對(duì)話框位置,在closeEvent()中進(jìn)行處理,然后在顯示之前,將對(duì)話框移動(dòng)到該位置。

    效果

    源碼

    MainWindow *pMainWindow = new MainWindow(); pMainWindow->setWindowTitle(QStringLiteral("主界面")); pMainWindow->show();CustomWindow *pDialog = new CustomWindow(pMainWindow); pDialog->setWindowTitle(QStringLiteral("非模式對(duì)話框"));// 關(guān)鍵代碼 pDialog->show();// 下面的代碼會(huì)立即運(yùn)行 pMainWindow->setWindowTitle(QStringLiteral("主界面-非模式對(duì)話框")); qDebug() << QStringLiteral("立即運(yùn)行")
  • 主界面不會(huì)被阻塞,可以進(jìn)行點(diǎn)擊、拖動(dòng)等任何操作。
  • show()之后的代碼會(huì)立即執(zhí)行。
  • 半模式對(duì)話框

    描述

    調(diào)用setModal(true)或者setWindowModality(),然后show()。有別于exec(),show() 立即返回給控制調(diào)用者。

    對(duì)于進(jìn)度對(duì)話框來(lái)說(shuō),調(diào)用setModal(true)是非常有用的,用戶必須擁有與其交互的能力,例如:取消長(zhǎng)時(shí)間運(yùn)行的操作。如果使用show()和setModal(true)共同執(zhí)行一個(gè)長(zhǎng)時(shí)間操作,則必須定期在執(zhí)行過(guò)程中調(diào)用QApplication ::processEvents(),以使用戶能夠與對(duì)話框交互(可以參考QProgressDialog)。

    效果

    源碼

    MainWindow *pMainWindow = new MainWindow(); pMainWindow->setWindowTitle(QStringLiteral("主界面")); pMainWindow->show();CustomWindow *pDialog = new CustomWindow(pMainWindow); pDialog->setWindowTitle(QStringLiteral("半模式對(duì)話框"));// 關(guān)鍵代碼 pDialog->setModal(true); pDialog->show();// 下面的代碼會(huì)立即運(yùn)行 pMainWindow->setWindowTitle(QStringLiteral("主界面-半模式對(duì)話框")); qDebug() << QStringLiteral("立即運(yùn)行")
  • 主界面被阻塞,不能進(jìn)行點(diǎn)擊、拖動(dòng)等任何操作。
  • show()之后的代碼會(huì)立即執(zhí)行。
  • 新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

    總結(jié)

    以上是生活随笔為你收集整理的Qt之模式、非模式、半模式对话框的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。