關於Qt模態視窗的設定

2021-10-07 09:15:37 字數 1346 閱讀 2184

模態視窗會阻止其他視窗的輸入型事件(如獲取焦點),但是模態視窗的子視窗不會被限制。

(設定 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 視窗 視窗彈出後,沒關閉之前,不可以對同一應用程式的其他視窗...