在状态栏上显示来自不同线程中回调的消息

Show message on statusbar from a callback in a different thread

本文关键字:线程 回调 消息 状态栏 显示      更新时间:2023-10-16

>我正在尝试在应用程序的状态栏上显示一些已连接/断开连接的消息。它是一个用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

我认为这意味着 showMessage 不是从 GUI 线程调用的。那么如何在状态栏上显示连接状态更改呢?

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