我正在使用第三方庫,我想在回調到UI(用qt編寫)時發生一些事件。我使用UI的函數指針註冊回調函數,但是當我得到回調函數時,出現以下錯誤 「QObject :: startTimer:QTimer只能用於以QThread開頭的線程」和 「QPixmap:它不是可以安全地在GUI線程之外使用pixmaps「 和分段錯誤。從非UI類到Qt UI的回調函數
我搜查,發現我不能直接調用UI功能,因爲它被稱爲在不同的線程
我想知道我怎麼可以註冊回調函數來更新UI。
我正在使用第三方庫,我想在回調到UI(用qt編寫)時發生一些事件。我使用UI的函數指針註冊回調函數,但是當我得到回調函數時,出現以下錯誤 「QObject :: startTimer:QTimer只能用於以QThread開頭的線程」和 「QPixmap:它不是可以安全地在GUI線程之外使用pixmaps「 和分段錯誤。從非UI類到Qt UI的回調函數
我搜查,發現我不能直接調用UI功能,因爲它被稱爲在不同的線程
我想知道我怎麼可以註冊回調函數來更新UI。
嗯,這聽起來像你需要兩樣東西:
我認爲這將解決互操作問題。
解決辦法有三個:
僅當您還希望在工作線程內部接收到信號時,來自用戶輸入的反饋(例如「取消」按鈕),您的工作線程中也需要一個QT事件循環。如果您的QTimer要在工作線程w/o事件循環中觸發一個插槽,則無法工作。
該類不一定在同一個線程中。這是信號/插槽的功能。 – ypnos 2010-11-09 09:40:44
我已經創建了一個新的類和一個靜態函數,並將其指針傳遞給回調函數,但它仍然給出相同的錯誤。我只是調用回調函數和打印一些跟蹤,而不是現在甚至不更新ui。 – prasad 2010-11-09 11:15:38
@ypnos:我認爲是這樣,但顯然OP需要它在同一個線程中...你的解決方案似乎更好,但:) – rubenvb 2010-11-09 17:13:54