qt - Qt 将 gui 小部件移动到 gui 线程
问题描述
所以 Qt 必须让所有的 GUI 应用程序都在主 GUI 线程中运行。我有一个启动 QDialog 的非 gui cpp,当我尝试与小部件交互时,我得到QObject::startTimer: Timers cannot be started from another thread
. 这就是让我发现我需要将小部件移动到主线程的原因。我的问题是如何移动no_id_wheel_screen
到主线程。
我的非gui线程的cpp
#include "gui_image_node.h"
gui_image_node::gui_image_node()
{
}
bool gui_image_node::init(int argc, char** argv)
{
m_pThread = new QThread();
m_no_id_wheel_screen = new no_id_wheel_screen;
this->moveToThread(m_pThread);
connect(m_pThread, &QThread::started, this, &gui_image_node::run);
connect(m_no_id_wheel_screen, &no_id_wheel_screen::ReadyHollander, this, &gui_image_node::HolPub);
hollander_pub = nh.advertise<std_msgs::String>("/hollander_chat", 1);
hol_trigger = nh.subscribe("awaiting_hollander", 1, &gui_image_node::Hollander_Screen_trigger_callback, this);
m_pThread->start();
return true;
}
//Where I start the widget
void gui_image_node::Hollander_Screen_trigger_callback(const std_msgs::String::ConstPtr& msg)
{
std::string steve = msg->data;
no_id_wheel_screen midscreen;
midscreen.exec();
}
解决方案
@Frank Osterfeld 有正确的想法。我刚刚与 MainWindow 建立了另一个连接,然后 MainWindow 执行了我的小部件。
推荐阅读
- asp.net - Swagger UI 未显示 ASP.NET API 的控制器/路由
- r - 当分数相同时选择具有优先级的观察
- python - pyside2 加载 qt 调试库
- ios - SwiftUI中出现键盘时如何避免View移出屏幕?
- maven - 部署到 Nexus 时,父 POM 未展平
- javascript - JS数组查找值
- caching - 缓存调用微服务的结果
- html - Bootstrap 5 - 在表单控件内定位浮动标签,宽度:自动?
- python - Python 用 beautifulsoup 抓取不能正确抓取一些数据行
- vb.net - VB.NET 在剪贴板上复制多个文件并粘贴到它们的文件夹中