模態視窗會阻止其他視窗的輸入型事件(如獲取焦點),但是模態視窗的子視窗不會被限制。
(設定 setattribute(qt::wa_showmodal, true); 的方式qt4.5已廢棄,略過)
目前,qt中設定視窗模態是通過 qwidget 的setwindowmodality()函式:
引數有三種列舉:
(注意,qt::windowmodal 的窗**得設定 parent, 不然你也阻塞不了誰啊,畢竟他只會坑爹,遇到不認識的就唯唯諾諾)qdialog 是 qwidget 的派生類,不同於 qwidget 的預設無模態,qdialog 有三種情況:
呼叫 open() 顯示:此時會忽略你設定的模態屬性,預設以 qt::windowmodal 顯示,但是是非同步處理,立即返回的。
int qdialog::exec()
bool deleteonclose = testattribute(qt::wa_deleteonclose);
setattribute(qt::wa_deleteonclose, false);
d->resetmodalitysetbyopen();
bool wasshowmodal = testattribute(qt::wa_showmodal);
setattribute(qt::wa_showmodal, true);
setresult(0);
show();
qpointerguard = this;
if (d->nativedialoginuse) else
if (guard.isnull())
return qdialog::rejected;
d->eventloop = nullptr;
setattribute(qt::wa_showmodal, wasshowmodal);
int res = result();
if (d->nativedialoginuse)
d->helperdone(static_cast(res), d->platformhelper());
if (deleteonclose)
delete this;
return res;
}void qdialog::open()
setresult(0);
show();
}
qt 文件:
qt 文件:
關於模態視窗
一.1.模態視窗 開啟後不可以操作父親視窗var returnvalue window.showmodaldialog url,arguments,features 2.非模態視窗 開啟後可以操作父親視窗var returnvalue window.showmodelessdialog url,ar...
QT 視窗的顯示與模態視窗
我們知道,在qt裡,只要建立乙個視窗的類,再呼叫qwidget基類的.show 方法就可以使乙個視窗顯示。以qwidget類來作說明 mywidget.cpp 主類的實現 include mywidget.h include ui mywidget.h include include include...
Qt基礎 模態與非模態視窗
設定置頂非模態視窗 在qt中,qdialog是所有對話方塊視窗類的基類,不只是對話方塊有模態與非模態區分,qwidget和qmainwindow視窗也可以設為模態,因此文章不稱模態 非模態對話方塊,而叫做模態 非模態視窗。模態 modal 視窗 視窗彈出後,沒關閉之前,不可以對同一應用程式的其他視窗...