QVariant
标准类型
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
int value = dataPlus(10,20).toInt();
QString str = dataPlus("hello","world").toString();
qDebug()<<"value:"<<value;
qDebug()<<"string:"<<str;
}
MainWindow::~MainWindow()
{
delete ui;
}
QVariant MainWindow::dataPlus(QVariant a, QVariant b)
{
QVariant ret;
if(a.type()==QVariant::Int&&b.type()==QVariant::Int)
{
ret = QVariant(a.toInt() + b.toInt());
}else if(a.type()==QVariant::String&&b.type()==QVariant::String)
{
ret.setValue(a.toString()+ b.toString());
}
return ret;
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
QVariant dataPlus(QVariant a,QVariant b);
private:
Ui::MainWindow *ui;
};
#endif
自定义类型
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
struct Person
{
int id;
QString name;
};
Q_DECLARE_METATYPE(Person)
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
QVariant dataPlus(QVariant a,QVariant b);
private:
Ui::MainWindow *ui;
};
#endif
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
int value = dataPlus(10,20).toInt();
QString str = dataPlus("hello","world").toString();
qDebug()<<"value:"<<value;
qDebug()<<"string:"<<str;
Person p;
p.id = 250;
p.name = "刘亦菲";
QVariant v;
v.setValue(p);
if(v.canConvert<Person>())
{
Person temp = v.value<Person>();
qDebug()<<"id:"<<temp.id<<"name:"<<temp.name;
}
}
MainWindow::~MainWindow()
{
delete ui;
}
QVariant MainWindow::dataPlus(QVariant a, QVariant b)
{
QVariant ret;
if(a.type()==QVariant::Int&&b.type()==QVariant::Int)
{
ret = QVariant(a.toInt() + b.toInt());
}else if(a.type()==QVariant::String&&b.type()==QVariant::String)
{
ret.setValue(a.toString()+ b.toString());
}
return ret;
}
- 运行结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/30a8a2036288f588bed3b85360599cd6.png)