我的Qt應用程序的主窗口是一個正常的QMainWindow
子類。在那個窗口中,我有幾個按鈕;每個人都有其clicked
信號連接自己的插槽,每個插槽創建一個不同的QDialog
像這樣:是否在插槽塊中調用QDialog :: exec主事件循環?
void onButtonA_clicked()
{
MyADialog* dialog = new MyADialog(this);
dialog->exec();
delete dialog;
}
我一直在閱讀這篇文章:https://wiki.qt.io/Threads_Events_QObjects#Events_and_the_event_loop和作者說
你永遠也不會阻止事件循環
這讓我擔憂; exec
是一個阻塞函數,所以根據他在那裏說的(他的例子Worker::doWork
,它做了很多工作,需要一些時間才能完成),我的代碼阻塞了事件循環,但我沒有注意到任何暗示這一點的事情;相反,主窗口似乎表現正常,並且在將代碼更改爲使用show()
方法時沒有區別。
我是否阻止事件循環?我應該在這裏使用不同的方法嗎?
據我所知,'int QDialog :: exec()'不會阻止Qt應用程序,只是父窗口,只有當對話框是窗口模式。 – Tarod
@Todod嗯,它是一個阻塞函數(在QDialog關閉之前它不會返回),這就是我不確定的原因。 – szczurcio