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)));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧