我想补充QProgressBar在我的代码,但有一些麻烦。 我通过设计师添加进度条,并在代码中,我通过指针QprogressBar对象到一个单独的线程有它更新QProgressBar,因为它处理数据的,但是,我得到这个消息:../../src/xcb_lock.c :77:_XGetXCBBuffer:断言`((int)的((xcb_req) - (dpy->请求))> = 0)”失败。 我在Ubuntu 8.10(2.6.27-11)上运行的Qt 4.5.0。 我也试过的Qt 4.3.5在RHEL5(2.6.18),我得到不同的错误,神秘的东西像Q漆误差X误差。 这似乎是罚款,当我从我的主要应用程序的exec循环更新进度条。
请帮助的NiMesh
该QWidget
类和所有它的子类,包括QProgressBar
,是不可重入,不能在主线程之外使用。 请参阅下列文件:
http://doc.trolltech.com/4.5/threads.html#threads-and-qobjects
你得到的错误,因为你试图更新QProgressBar
从主线程之外。
更新进度条的优选方法是使与数据处理线程相关联的一个对象周期性地发射一个信号,作为它的进展,则该信号连接到setValue(int)
在插槽QProgressBar
。 Qt的将确保信号槽连接是线程安全的。 参阅上跨线程连接信号和槽的文档:
http://doc.trolltech.com/4.5/threads.html#signals-and-slots-across-threads
希望这可以帮助。