Qt之模式 非模式 半模式對話方塊

2022-04-29 19:09:15 字數 2583 閱讀 1451

關於「模式」和「非模式」對話方塊,相信大家都比較熟悉,但其中有乙個可能很多人都比較陌生,介於兩者之間的狀態,我們稱之為「半模式「。

非模式對話方塊

半模式對話方塊

更多參考

阻塞同一應用程式中其它可視視窗輸入的對話方塊。模式對話方塊有自己的事件迴圈,使用者必須完成這個對話方塊中的互動操作,並且關閉了它之後才能訪問應用程式中的其它任何視窗。模式對話方塊僅阻止訪問與對話相關聯的視窗,允許使用者繼續使用其它視窗中的應用程式。

顯示模態對話方塊最常見的方法是呼叫其exec()函式,當使用者關閉對話方塊,exec()將提供乙個有用的返回值,並且這時流程控制繼續從呼叫exec()的地方進行。通常情況下,要獲得對話方塊關閉並返回相應的值,我們連線預設按鈕,例如:」確定」按鈕連線到accept()槽,」取消」按鈕連線到reject()槽。另外我們也可以連線done()槽,傳遞給它accepted或rejected。

pmainwindow->setwindowtitle(qstringliteral("主介面"));

pmainwindow->show();

customwindow *pdialog =

new customwindow(pmainwindow);

pdialog->setwindowtitle(qstringliteral("模式對話方塊"));

// 關鍵**

pdialog->exec();

// 關閉模態對話方塊以後才會執行下面的**

pmainwindow->setwindowtitle(qstringliteral("主介面-模式對話方塊"));

qdebug() << qstringliteral("關閉模態對話方塊以後,可以繼續向下執行");

主介面被阻塞,不能進行點選、拖動等任何操作。

exec()之後的**不會執行,直到關閉模態對話方塊。

和同乙個程式中其它視窗操作無關的對話方塊。在文書處理中的查詢和替換對話方塊通常是非模式的,允許使用者同時與應用程式的主視窗和對話方塊進行互動。呼叫show()來顯示非模式對話方塊,並立即將控制返回給呼叫者。

如果隱藏對話方塊後呼叫show()函式,對話方塊將顯示在其原始位置,這是因為視窗管理器決定的窗戶位置沒有明確由程式設計師指定,為了保持被使用者移動的對話方塊位置,在closeevent()中進行處理,然後在顯示之前,將對話方塊移動到該位置。

pmainwindow->setwindowtitle(qstringliteral("主介面"));

pmainwindow->show();

customwindow *pdialog =

new customwindow(pmainwindow);

pdialog->setwindowtitle(qstringliteral("非模式對話方塊"));

// 關鍵**

pdialog->show();

// 下面的**會立即執行

pmainwindow->setwindowtitle(qstringliteral("主介面-非模式對話方塊"));

qdebug() << qstringliteral("立即執行");

主介面不會被阻塞,可以進行點選、拖動等任何操作。

show()之後的**會立即執行。

呼叫setmodal(true)或者setwindowmodality(),然後show()。有別於exec(),show() 立即返回給控制呼叫者。

pmainwindow->setwindowtitle(qstringliteral("主介面"));

pmainwindow->show();

customwindow *pdialog =

new customwindow(pmainwindow);

pdialog->setwindowtitle(qstringliteral("半模式對話方塊"));

// 關鍵**

pdialog->setmodal(true);

pdialog->show();

// 下面的**會立即執行

pmainwindow->setwindowtitle(qstringliteral("主介面-半模式對話方塊"));

qdebug() << qstringliteral("立即執行");

主介面被阻塞,不能進行點選、拖動等任何操作。

show()之後的**會立即執行。

Qt 之模式 非模式 半模式對話方塊

1 qt模態對話方塊 mainwindow pmainwindow new mainwindow pmainwindow setwindowtitle qstringliteral 主介面 pmainwindow show customwindow pdialog new customwindow ...

Qt 非模式對話方塊

應用例項 搜尋框 建立乙個widget物件,作為主窗體的成員變數 searchwindow m searchwin m searchwin new searchwindow this m searchwin setwindowflags qt window 在使用者執行搜尋選單時顯示此視窗 int ...

QT對話方塊模式與非模式

非模態對話方塊 modeless dialog 的概念不是模態對話方塊就是在其沒有被關閉之前,使用者不能與同乙個應用程式的其他視窗進行互動,直到該對話方塊關閉。對於在模態來顯示對話方塊 另一種是使用show 方法,它使得對話方塊既可以非模態顯示,決定它是非模態的是對話方塊的modal屬性。在qt的非...