在状态栏上显示来自不同线程中回调的消息
Show message on statusbar from a callback in a different thread
>我正在尝试在应用程序的状态栏上显示一些已连接/断开连接的消息。它是一个用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()
槽。如果要在状态栏上显示某些内容,请发出信号并传递相应的消息。
相关文章:
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- libevent是否允许在不同的线程中运行timer/io的回调
- C++ 线程端回调并返回结果
- 如何调用来自不同线程的回调?
- 限制空闲事件的回调率,而无需阻止线程而无需多线程
- 来自C 线程的节点FFI回调
- 线程池的计时测试:单线程 vs 回调 tp vs 未来 tp
- 复制文件时如何调用取消?(使用复制文件 ex 函数和复制进度例程回调函数)
- 从TLS回调中获取线程信息
- Openssl 线程安全回调函数注册,包括直接调用和间接调用
- 在状态栏上显示来自不同线程中回调的消息
- 在用户模式下从另一个进程回调,没有额外的线程
- Boost异步主线程回调
- 如何在C++中的原始线程中执行回调
- 从多线程C++插件回调NodeJS Javascript函数
- 哪个线程调用windows proc回调函数
- 有关回调函数和线程的一般查询
- 通过JNI从本机线程回调时Java线程泄漏
- 线程中的回调函数
- 当从线程池调用时,boost 的io_service是否共享请求的线程?