小编Der*_*erk的帖子

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

目前我有一些麻烦将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);
}
Run Code Online (Sandbox Code Playgroud)

主线程中信号和插槽的连接:

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

主线程中的插槽:

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

Thread通过使用QObject的moveToThread启动,并QVector<float>通过qRegisterMetaType< QVector<float> >("QVector<float>");main方法注册到元系统.

Pipeline::process返回后数据是否可能丢失?我不确定QVector这个多线程情况下隐式共享内部的行为如何.

任何帮助,将不胜感激.

问候

qt multithreading signals-slots qthread

4
推荐指数
1
解决办法
3148
查看次数

标签 统计

multithreading ×1

qt ×1

qthread ×1

signals-slots ×1