在另一个线程中的回调中显示状态栏上的消息

时间:2012-11-27 12:41:02

标签: c++ qt qthread

我正在尝试在应用程序的状态栏上显示一些已连接/已断开连接的消息。它是一个用c ++编写的控制台应用程序,带有Qt GUI。当连接状态发生变化时,连接处理程序会调用回调(在某些gui相关对象中),这会更新GUI。我可以在我的QGraphicsScene上绘图,但是当我尝试使用QStatusBar的showMessage方法时,有时会立即崩溃,有时它会工作直到几次调用(但是超时过后消息不会消失)。我收到此错误消息:

QObject: Cannot create children for a parent that is in a different thread.
(Parent is QStatusBar(0xae55feb0), parent's thread is QThread(0xb3e006f0), current thread is QThread(0xb0c00478)
QObject::startTimer: QTimer can only be used with threads started with QThread
QPixmap: It is not safe to use pixmaps outside the GUI thread

我认为这意味着不会从GUI线程调用showMessage。那我怎么能在状态栏上显示连接状态变化?

1 个答案:

答案 0 :(得分:3)

不允许您从非GUI线程进行直接GUI调用。您需要做的是设置信号/插槽连接。在实现连接处理程序的类中创建一个信号,并将其连接到状态栏的showMessage()插槽。如果要在状态栏上显示某些内容,请发出信号并传递相应的消息。