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 @ 2024-08-22 14:58  BangZeng  阅读(13)  评论(0编辑  收藏  举报