QT自定义结构体的传递

方法1:使用Q_DECLARE_METATYPE(TestResult) 进行声明

1.1声明

复制代码
#ifndef TESTRESULT_H
#define TESTRESULT_H

#include <QDateTime>
#include <QString>
#include <QMetaType>
//用于测试时更新内容,作为结果导出的依据

class TestResult
{

public:
    int _nid=0;
    int _count=0;
    int _passCount=0;     //通过计数
    int _unPassCount=0;
    QDateTime _startTime;
    QDateTime _endTime;

};
//声明自定义类型 用于消息传递
Q_DECLARE_METATYPE(TestResult);
#endif // TESTRESULT_H
复制代码

1.2 使用Qvariant 进行打包发送

        //未注册自定结构体,打包发送
        QVariant var;
        var.setValue(TestResult);
        emit UpdateTestResult(var);

1.3信号槽 连接 参数使用Qvariant

signal:
void UpdateTestResult(const QVariant& result);
Slots:
 void ShowTestResuult(const QVariant& testResult);
connect(&Testthread,&TestThread::UpdateTestResult,this,&Form::ShowTestResuult);

 1.4 参数解包

复制代码

void Form::ShowTestResuult(const QVariant& VartestResult)
{
TestResult testResult =VartestResult.value<TestResult>();
QString str = QString::number( testResult._nid)+"/"+QString::number(testResult._count);
ui->lable_Index->setText(str);
ui->progressBar->setMaximum(testResult._count);
ui->progressBar->setValue(testResult._nid);

ui->lineEdit_startTime->setText(testResult._startTime.toString("yyMMdd-HH:mm:ss"));
ui->lineEdit_endTime->setText(testResult._endTime.toString("yyMMdd-HH:mm:ss"));
ui->lineEdit_passcount->setText(QString::number(testResult._passCount));
ui->lineEdit_unpasscount->setText(QString::number(testResult._unPassCount));

}

复制代码

 

方法2:使用qRegisterMetaType注册(待验证使用)

复制代码
#include <QMetaType>
typedef struct People{
int age;
QString name;
}People;

//在使用之前注册:
qRegisterMetaType<People>("People");

//connect函数
connect(sender, SIGNAL(signalPeople(People)),
receiver, SLOT(slotPeople(People)));
复制代码

 

posted @   BangZeng  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示