我正在尝试在代码中添加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,我得到了不同的错误,像Q错误的Q错误一样神秘。 当我从主应用程序exec循环更新进度条时似乎没问题。
请帮忙 的NiMesh
答案 0 :(得分:3)
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
希望这有帮助。