Qt自定义类型QVariant

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= "鸿喆" 

你可能感兴趣的:(C++)