Qt 爲自己的程序建立一個消息循環

At any time, you can create a QEventLoop object and call exec() on it to start a local event loop. From within the event loop, calling exit() will force exec() to return.從Qt文檔上找出這句話。所以,我們時刻都可以爲自己的應用程序創建消息循環。看代碼吧!

void CDialog::on_pushButton_clicked()//[slot]
{
    QDialog tDlg;
    tDlg.show();
    QEventLoop tLoop;
    connect(&tDlg, SIGNAL(finished(int)), &tLoop, SLOT(quit()));
    tLoop.exec(QEventLoop::AllEvents);
}

當然,如果沒用QEventLoop ,tDlg窗口會一閃而過!
不少人遇到過這個問題:在一個槽函數內創建了一個窗口對象,卻沒有看到窗口彈出來,或者看到窗口一閃而過。

類似這樣:

void CDialog::on_pushButton_clicked()//[slot]
{
QDialog dlg;
dlg.show()
}

當然,大家都知道原因:因爲到了後面的大括號處,dlg因爲出作用域,會被析構掉。解決方法很簡單。比如:
將 dlg 作爲類的成員,而不是函數的局部變量
將 dlg 前面添加 static,作爲靜態成員
將 dlg 用 new 分配到 heap 中
...
當然上面的是用 QEventLoop 來解決的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章