Q_DECLARE_METATYPE 这个宏是用来定制类型
struct 申明结构体关键字 用法如下 :
struct 结构体名{
结构体所包含的变量或数组
};
使用宏来申明一个自定义类型
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
struct Person
{
int id;
QString name;
qint8 age;
};
Q_DECLARE_METATYPE(Person)
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
Person person;
person.id=100;
person.age=20;
person.name="鸿喆";
#if 0
QVariant q;
q.setValue(person);//存储数据
#else
QVariant q = QVariant::fromValue(person);//静态方法存储数据
#endif
if(q.canConvert<Person>())//判断是否可以转换
{
Person temp=q.value<Person>();//获取数据
Person qvar= qvariant_cast<Person>(q);//获取数据
qDebug()<<"Person:{id="<<temp.id<<",age="<<temp.age<<",name="<<temp.name<<"\n";
qDebug()<<"Person:{id="<<qvar.id<<",age="<<qvar.age<<",name="<<qvar.name<<"\n";
}
}
MainWindow::~MainWindow()
{
delete ui;
}
打印语句
Person:{id= 100 ,age= 20 ,name= "鸿喆"
Person:{id= 100 ,age= 20 ,name= "鸿喆"