通过信号/槽将 QVector 从工作线程传递到主线程

2024-06-22

目前,我在将 QVector 传递到线程之间时遇到一些麻烦。目前我有一个主线程(GUI-Thread)和一个频繁发出 QVector 数组的工作线程。在向量内直接发出数据之前看起来不错。接收者是主线程中的一个槽,但该槽接收到的数据是乱码。

这是我的代码的一些部分:

在工作线程中发出:

void Pipeline::process
{
    QVector<float> buffer(w * h * d);

    // filling the vector with RGB-Values

    emit this->pushBuffer(buffer, w, h, d);
}

主线程中signal和slot的连接:

QObject::connect(this->_pipeline.data(), SIGNAL(pushBuffer(const QVector<float>, int, int, int)), this->ui->widgetFiltered, SLOT(setBuffer(const QVector<float>,int,int,int)));

主线程中的插槽:

void GLWidget::setBuffer(const QVector<float> buffer, int dataSizeX, int dataSizeY, int dataSizeZ)
{
    // at this point the contents inside 'buffer' is garbled
}

线程是通过使用 QObject 的 moveToThread 来启动的QVector<float>注册到元系统qRegisterMetaType< QVector<float> >("QVector<float>");在主要方法中。

之后数据有可能丢失吗Pipeline::process回报?我不确定里面的隐式共享是如何实现的QVector在这种多线程情况下的行为。

任何帮助,将不胜感激。

问候

Wolf


a) 注册元类型 QVector。之前添加这一行app.exec()在你的主要功能中:

qRegisterMetaType<QVector<float> >("QVector<float>");

没有这个 QueuedConnection 将无法工作。

b)明确说明您的信号和插槽通过以下方式连接Qt::QueuedConnection如果您在连接后执行 moveToThread,这应该修复正确线程中的插槽执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过信号/槽将 QVector 从工作线程传递到主线程 的相关文章

随机推荐

  • “git”无法可见,因为它的所有子项都位于不可用的操作集中

    我有这个问题 我不知道如何获取工具栏上的 Git 部分 下图显示了具体的错误 感谢您的所有回答 在 操作集可用性 中勾选 Git 和 Git 导航操作 然后在 工具栏可见性 中勾选 Git
  • C++:使用声明和重载范例

    我在看这一页 https www cppstories com 2018 09 visit variants 关于 C 17 的 新 功能 特别是我理解几乎所有以下代码 include
  • Android 完成活动不起作用

    一旦用户从我的 ListView 中选择了产品 它就会将该 ListView 中选定的文本放入 EditText 中 我遇到的问题是 当用户从列表中选择一个产品 然后按返回时 它会再次显示该列表 而不是返回到 EditText 活动 我尝试
  • 为什么 Android Studio 无法识别 .jar 库导入?

    我正在尝试在我的 Android Studio 项目中使用一些 jar 文件作为库 我一直在寻找如何做到这一点 常规方法是将 jar 文件复制到 libs 文件夹中 然后将其添加为库 我知道 libs 文件夹必须位于 项目 视图中的 app
  • 切换到heroku cedar-14导致内存消耗持续增加

    Heroku 最近宣布今年 11 月之后将不再支持 cedar 10 切换到 cedar 14 导致内存消耗增加 直到我遇到 R14 内存配额超出 错误并不得不重新启动 heroku 在我开始使用 unicorn worker killer
  • 使用 Javascript 将变量传递给弹出窗口

    我需要将一些文本从当前页面传递到弹出窗口 而不需要服务器点击 该信息 此处用 90 表示 已在父表单中可用 它就像存储在隐藏变量中的一段长文本 我只需要将其显示为弹出窗口 这是我尝试过的 这在某种程度上有效 但如果我传递文本而不是数字 则不
  • Java 错误“未使用局部变量的值”

    我对java真的很陌生 2天前开始学习 抱歉 如果这是一个愚蠢的问题 我正在尝试学习如何使用 rt exec 和类似的方法 因此我尝试制作一个运行 calc exe 的非常简单的程序 这是代码 public class main try R
  • 如何重新启动模拟器进入恢复模式

    有什么办法可以将模拟器重新启动到恢复模式吗 Android模拟器不支持恢复模式 只支持正常启动模式 Android 模拟器接受 Android 映像 包括内核和 ramdisk 映像 作为其命令行界面上的独立映像 它们不会被编译为一个大映像
  • Spring Boot 安全性和设置 security.basic.path

    我正在尝试使用 Spring Boot 它是自动配置 Spring Security 的自动配置未来 我按照教程操作http spring io guides gs secure web http spring io guides gs s
  • 如何将多个复选框值插入到表中?

    我似乎无法找到或弄清楚将多个复选框值从表单插入到表中的工作解决方案 我的结束是将仅一个复选框值的值插入到表中 请指出我如何插入多个复选框值 而不仅仅是一个 在下面找到我到目前为止所拥有的 My form
  • 如何突出显示页面上与单词数组匹配的所有单词?

    我想找到我的网页上与 Javascript 数组中的任何单词匹配的所有单词 并突出显示它们 将它们包装在特殊的 span 标签中 做到这一点最简单的方法是什么 我用jquery 不完美 但简单并且可能有效 var regex Hello G
  • 未对齐的内存访问

    我正在开发不支持未对齐内存访问的嵌入式设备 对于视频解码器 我必须处理 8x8 像素块中的像素 每个像素一个字节 该设备具有一些 SIMD 处理功能 使我能够并行处理 4 个字节 问题是 8x8 像素块不能保证从对齐的地址开始 并且函数需要
  • 使用 Python 全文搜索 XML 数据:最佳实践、优缺点

    Task 我想使用 Python 对 XML 数据进行全文搜索 示例数据
  • 将动态生成的表单嵌入到另一个表单中

    我使用 Symfony2 1 的 FormBuilder 在控制器中创建动态表单 form this gt createFormBuilder defaultData form gt add field text 我想以同样的方式嵌入另一个
  • 计算向量 v 矩阵的“v^T A v”

    我有一个k n矩阵 X 以及k k矩阵 A 对于每列X 我想计算标量 X i T dot A dot X i 或者 从数学角度来说 Xi A Xi 目前 我有一个for loop out np empty n for i in xrange
  • 如果为 TestFixture 级别设置“Property”属性,是否有可能获取 Nunit“Property”属性值

    这是我的 TestFixture 类 namespace TestApplication Tests TestFixture Property type smoke public class LoginFixture Test Proper
  • 使用 Linking.sendIntent() 打开设置

    我想在android中打开系统设置 根据文档 Linking sendIntent https facebook github io react native docs linking sendintent可以发送提到的意图安卓设置 htt
  • 另一个生命游戏问题(无限网格)?

    我一直在玩 Conway 的生命游戏 最近发现了一些令人惊讶的快速实现 例如 Hashlife 和 Golly 在这里下载Golly http golly sourceforge net http golly sourceforge net
  • 在 PyQt5 中,如何使用拖放正确移动 QTableView 中的行

    我 只是 希望能够使用QTableView用于移动现有行的拖放机制 我找到了很多来源 例如here https stackoverflow com questions 12168610 qtableview drag move rows h
  • 通过信号/槽将 QVector 从工作线程传递到主线程

    目前 我在将 QVector 传递到线程之间时遇到一些麻烦 目前我有一个主线程 GUI Thread 和一个频繁发出 QVector 数组的工作线程 在向量内直接发出数据之前看起来不错 接收者是主线程中的一个槽 但该槽接收到的数据是乱码 这