QT开发中文网

qt 线程传QVector &dataArray类型数据

在Qt中,可以使用信号与槽机制来在线程之间传递数据。对于传递QVector &dataArray类型的数据,在线程类中定义一个信号,然后将需要传递的数据作为参数发送信号,在主线程中连接这个信号到相应的槽函数进行处理。

以下是一个示例代码:

// 线程类 ThreadClass.h

#ifndef THREADCLASS_H
#define THREADCLASS_H

#include <QObject>
#include <QThread>
#include <QVector>

class ThreadClass : public QThread
{
    Q_OBJECT

public:
    explicit ThreadClass(QObject *parent = nullptr);

signals:
    void dataReady(QVector<quint8> &dataArray); // 定义一个带有 QVector<quint8> & 参数的信号

protected:
    void run() override;
};

#endif // THREADCLASS_H


// 线程类 ThreadClass.cpp

#include "ThreadClass.h"

ThreadClass::ThreadClass(QObject *parent) : QThread(parent)
{

}

void ThreadClass::run()
{
    QVector<quint8> dataArray;
    
    // 数据处理过程...
    
    emit dataReady(dataArray); // 发送带有 QVector<quint8> & 参数的信号
}


// 主线程代码 MainThread.cpp

#include <QCoreApplication>
#include <QDebug>
#include "ThreadClass.h"

class MainThread : public QObject
{
    Q_OBJECT
    
public slots:
    void onDataReady(QVector<quint8> &dataArray)
    {
        // 在此处处理接收到的数据
        qDebug() << "Received data size:" << dataArray.size();
        for (const auto &value : dataArray)
        {
            qDebug() << value;
        }
    }
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    ThreadClass thread;
    MainThread mainThread;
    
    QObject::connect(&thread, &ThreadClass::dataReady, &mainThread, &MainThread::onDataReady);
    
    thread.start();
    
    return a.exec();
}

#include "MainThread.moc"

在上面的示例中,线程类 ThreadClass 继承自 QThread,并定义了一个信号 dataReady,参数是 QVector &dataArray。在线程运行过程中,可以对 dataArray 进行处理,并通过 emit 关键字发送信号。

主线程类 MainThread 定义了槽函数 onDataReady,用于接收来自线程的数据。在主线程中使用 QObject::connect() 函数将线程的信号与主线程的槽函数连接起来。

以上是一种基本的方法来传递 QVector & 类型的数据。请根据实际需求进行相应的调整和优化。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=4873

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?