2010-02-02 21 views
0

我想在我的代碼中添加QProgressBar,但有一些麻煩。我通過Designer添加了進度條,在代碼中,我將指向QprogressBar對象的指針傳遞給一個單獨的線程,以便在它處理數據時更新QProgressBar,但是,我收到以下消息: ../../src/xcb_lock。 c:77:_XGetXCBBuffer:斷言`((int)((xcb_req) - (dpy-> request))> = 0)'失敗。 我在Ubuntu 8.10(2.6.27-11)上運行Qt-4.5.0。 我也在RHEL5(2.6.18)中試過Qt-4.3.5,並且我得到了不同的錯誤,像QPaint錯誤那樣的X錯誤。 當我從主應用程序exec循環更新進度條時似乎沒有問題。QProgressBar錯誤

請幫 的NiMesh

回答

3

QWidget類及其所有子類,包括QProgressBar的,是不可重入,不能在主線程之外使用。請參考以下文件:

http://doc.trolltech.com/4.5/threads.html#threads-and-qobjects

你得到錯誤,因爲你正試圖從主線程以外更新QProgressBar

更新進度條的首選方法是讓附屬於數據處理線程的對象隨着其進展週期性地發出信號,然後將此信號連接到QProgressBar中的setValue(int)插槽。 Qt將確保信號插槽連接是線程安全的。請參閱文檔上的連接信號和槽的跨線程:

http://doc.trolltech.com/4.5/threads.html#signals-and-slots-across-threads

希望這有助於。