本文主要是介绍qt用信号与槽,发送自定义结构体,一定要先注册,注册元对象 Q_DECLARE_METATYPE(Student),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
//1.定义结构体
struct Student
{int m_id;int m_age;QString m_name;
};//2.注册元对象
Q_DECLARE_METATYPE(Student)class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();
private slots:void onSigSendStruct( const QVariant varValue);signals:void sigSendStruct( const QVariant varValue);
}
2.连接信号槽
connect(this, &MainWindow::sigSendStruct,this, &MainWindow::onSigSendStruct);
3.使用QVariant打包数据并发送
Student iStudent;iStudent.m_id = 1;iStudent.m_age = 22;iStudent.m_name = "Allen";QVariant varValue = QVariant::fromValue(iStudent);emit sigSendStruct(varValue);
4.在槽函数中解包并打印
void MainWindow::onSigSendStruct(const QVariant varValue)
{if (varValue.canConvert<Student>()){Student student = varValue.value<Student>();qDebug()<<"ID : "<<student.m_id;qDebug()<<"Age : "<<student.m_age;qDebug()<<"Name : "<<student.m_name;}}
5.运行结果:
这篇关于qt用信号与槽,发送自定义结构体,一定要先注册,注册元对象 Q_DECLARE_METATYPE(Student)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!