方法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)));
标签:QT,自定义,People,TestResult,传递,ui,QString,._,testResult From: https://www.cnblogs.com/bang20221103/p/18373880