Qt中的QVariant示例

对标准类型

在mainwindow.h中的public添加函数声明:

// 两个变量进行加法运算,变量可以是正行,也可能是字符串
QVariant dataPlus(QVariant a, QVariant b);

在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() << "int value: " << value;
    qDebug() << "string value: " << 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;
}

对自定义类型

先在.h文件中

struct Person
{
    int id;
    QString name;
};

在cpp文件中

// 创建Person对象
    Person p;
    p.id = 250;
    p.name = "张三疯";

#if 1
    QVariant v;
    v.setValue(p);
#else
    QVariant v = QVariant::fromValue(p);
#endif
    // 取出v对象中的数据
    if(v.canConvert<Person>())
    {
        Person tmp = v.value<Person>();
        qDebug() << "id: " << tmp.id << ", name: " << tmp.name;
    }

QVariant_canconvert是Qt框架中的一个函数,用于确定QVariant对象是否可以转换为特定类型的数据。如果QVariant对象可以转换为指定类型,则返回true;否则返回false。该函数通过使用QMetaType或特定类型的元对象来检查对象的类型。可以使用该函数来查找适当的转换程序以将QVariant对象转换为所需的类型。

posted @ 2023-03-18 11:42  朱英浩  阅读(186)  评论(0)    收藏  举报