Qt-QVariant

QVariant

标准类型

  • mainwindow.cpp
#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)
{
    // 1 定义接收变量
    QVariant ret;
    // 2 判断当前参数的类型是字符串还是整形
    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());
    }
    // 3 返回
    return ret;
}
  • mainwindow.h
#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();

    // 两个变量进行加法运算,变量可能是整形,也可能是字符串

    // 1 声明函数
    QVariant dataPlus(QVariant a,QVariant b);

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

自定义类型

  • mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
/*******QVariant自定义类型**************/
// 1、添加自定义类型
struct Person
{
  int id;
  QString name;
};
// 2、通过QT提供的宏进行结构体的声明
Q_DECLARE_METATYPE(Person)

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    // 两个变量进行加法运算,变量可能是整形,也可能是字符串

    // 1 声明函数
    QVariant dataPlus(QVariant a,QVariant b);

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
  • mainwindow.cpp
#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;
    /*******QVariant自定义类型**************/
    // 1、创建Person对象和初始化
    Person p;
    p.id = 250;
    p.name = "刘亦菲";
    // 2、封装p对象
    QVariant v;
    v.setValue(p);
    // 3、取出v对象中的数据
    if(v.canConvert<Person>()) // 如果v对象中的数据可以转换成person型
    {
        Person temp = v.value<Person>();
        qDebug()<<"id:"<<temp.id<<"name:"<<temp.name;
    }

}

MainWindow::~MainWindow()
{
    delete ui;
}

QVariant MainWindow::dataPlus(QVariant a, QVariant b)
{
    // 1 定义接收变量
    QVariant ret;
    // 2 判断当前参数的类型是字符串还是整形
    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());
    }
    // 3 返回
    return ret;
}


  • 运行结果
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值