2015-09-28 105 views
0

我點擊一個按鈕,連接myfuntion見下。我正在使用一個QEventLoop,因爲我在等待一個事件,這將調用_myEventLoop.exit(0);因爲我正在等待一個事件,這將調用_myEventLoop.exit(0);QEventLoop已經在調用exec()之前調用了exit()

當我點擊按鈕,在連續兩次,而無需等待事件發生,我得到的錯誤信息:調用exec之前

QEventLoop::exec: instance 0x22f47378 has already called exec() 

我做了呼叫退出(1)(),但它似乎這個退出立即返回,然後由exec()函數通過,因爲它仍在運行返回1,myfunction返回並且只有第一個exec()返回1.

我怎樣才能確定以前在繼續之前調用exec()已經返回?

void myfuntion() 
{ 
    _myEventLoop.exit(1); 
    if(_myEventLoop.exec() == 0) 
    { 
     // DoSomething 
    } 
} 
+0

的目標是什麼這裏到底是什麼?我沒有看到一遍又一遍重新啓動本地事件循環有什麼意義。 – thuga

+0

我的目標是阻止該功能的用戶,直到某個事件發生。如果該功能被其他人調用來釋放第一個用戶並阻止最後一個呼叫者。 從我所瞭解的eventLoop如何工作我不能和我徹底改變了觀念。 – Giacogiac

+0

@Giacogiac可以請你詳細說明你的方法嗎? – RDP

回答

1

你可以打電話給QEventLoop::processEvents進程任何未決的事件。
你的代碼會像:

void myfuntion() 
{ 
    _myEventLoop.exit(1); 
    _myEventLoop.processEvents(); 

    if(_myEventLoop.exec() == 0) 
    { 
     // DoSomething 
    } 
} 
+0

這是不行的,它沒有任何效果 – Giacogiac

相關問題