2013-04-17 20 views
0

在我的代碼中,我有以下更新qlabel的函數。 qlabel更新頻繁。該代碼是正在更新Qlabel要求標籤不是文本標籤的文檔矩形。爲什麼?

void foo::someMethod(std:atring a) 
{ 
    {//begin 
    boost::lock_guard<boost::mutex> lock(mutex_label); 
    frm->mylabel->setText(a.c_str()); 
    }//end lock 
} 

再經過一段時間,我得到一個斷言錯誤:

assert failure in documentRect: "document rect called for label that is not a text label! , file widgets\qlabel.cpp 

任何建議什麼可能導致它?有時候,價值永遠不會顯示。我必須移動要更新的值的表單

+0

你是否將它設置爲從多個線程更新? – cmannett85

+0

以上方法是靜態的。和各種線程調用該方法 – Rajeshwar

回答

3

您無法從另一個線程觸摸GUI。 Qt並不支持這種互斥量。正確的方法是通過信號和插槽來完成。

您可以在Qt signaling across threads, one is GUI thread?瞭解更多。

+0

你能解釋一下嗎?您是否建議我創建一個信號,然後使用該信號傳遞數據? – Rajeshwar

+0

您無法從非GUI線程調用setText(大部分情況下,在您的程序中啓動的第一個線程是GUI線程)。相反,聲明一個在主線程中執行的插槽,並連接連接到它的信號(在非gui線程中發出)。這樣setText將只從GUI線程被調用。 –

相關問題