QVariant类api及相关用法

目录

1、QVariant对象概述

2、QVariant对象的使用

3.使用QVariant对QT中标准数据类型进行处理

 4.使用QVariant对QT中自定义数据类型进行处理

setValue     

fromValue    

canConvert


1、QVariant对象概述

在Qt中,QVariant是一个通用的值容器,它可以存储任意类型的数据,例如整数、字符串、列表等等。它的主要作用是提供一种通用的数据类型,方便在不同的函数、类、模块之间传递数据。

2、QVariant对象的使用

QVariant对象的使用非常简单,主要包括以下几个方面:

存储数据:可以通过构造函数、赋值操作符、setValue函数等方法将数据存储到QVariant对象中。例如:

QVariant v1 = 10; // 存储整数
QVariant v2 = "hello"; // 存储字符串
QVariant v3 = QList() << 1 << 2 << 3; // 存储整数列表

获取数据:可以通过toXXX函数将QVariant对象转换为指定类型的数据。例如:

int n = v1.toInt(); // 将整数转换为int类型
QString str = v2.toString(); // 将字符串转换为QString类型
QList list = v3.toList(); // 将整数列表转换为QList类型
 

判断数据类型:可以使用type函数判断QVariant对象中存储的数据类型。例如:

if (v1.type() == QVariant::Int) {
    // v1中存储的是整数
}

清空数据:可以使用clear函数清空QVariant对象中存储的数据。例如:

v1.clear(); // 清空v1中存储的数据

QVariant类提供了三种构造函数:

1. QVariant()

默认构造函数,创建一个空的QVariant对象。

2. QVariant(const T &value)

模板构造函数,可使用任何类型的值作为参数,示例代码:

int i = 10;
QVariant v(i);

3. QVariant(QVariant::Type type)

构造函数,用于在不存储任何值的情况下创建一个指定类型的QVariant对象,示例代码:

QVariant v(QVariant::Int);

使用这个构造函数创建的QVariant对象不包含数据,但是有一个类型。可以通过使用setValue()或转换操作符将数据添加到对象中。

3.使用QVariant对QT中标准数据类型进行处理

先在mainwindow.h头文件中添加一个测试函数,这个函数的功能是两个变量进行加法运算

QVariant类api及相关用法_第1张图片

 在mainwindow.cpp中写以下代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
//此处调用了C++隐式类型转换
    //整形数
    int value = dataPlus(10,20).toInt();
    //字符串
    QString str = dataPlus("hello","world").toString();
    qDebug() << "int value: "<

运行结果:

 4.使用QVariant对QT中自定义数据类型进行处理

        Q_DECLARE_METATYPE()是一个宏定义,用于向Qt元对象系统中注册自定义类型。当我们需要在信号和槽中传递用户定义的类型时,需要使用该宏将该类型注册到Qt的元对象系统中,以便可以在元对象系统中使用该类型的变量、参数和返回值。该宏需要接收一个类型的名称作为参数,例如:

Q_DECLARE_METATYPE(MyCustomType)

mainwindow.h中写入:

struct Person
{
    int id;
    QString name;
};
Q_DECLARE_METATYPE(Person)

mainwindow.cpp中写入:

    //创建Person对象
    Person p;
    p.id = 100;
    p.name = "小明";
//方法1
#if 0
    QVariant v;
    v.setValue(p);
//方法2
#else
    QVariant v = QVariant::fromValue(p);
#endif
    //取出v对象中的数据
    if(v.canConvert())
    {
        Person tmp = v.value();
        qDebug() <<"id: "<

        

 对上面代码的一些补充:

setValue     

   setValue是QVariant类的一个成员函数,用于设置QVariant对象的值。它接受一个任意类型的参数,将其转换为QVariant类型,然后将该QVariant类型的值设置给调用函数的QVariant对象。例如,可以使用如下方式设置一个整数值给QVariant对象:

QVariant var;
int value = 42;
var.setValue(value);

fromValue    

    fromValue是Qt的QVariant类的一个静态成员函数,用来将一个给定的值转换为QVariant类型的变量。该函数可以接收任何类型的值,包括基本数据类型、自定义类和结构等。例如,可以使用如下方式将一个整数值转换为QVariant类型的变量:

int value = 42;
QVariant var = QVariant::fromValue(value);

        这样,变量var就被赋值为一个QVariant类型的变量,并包含值为42的整数。在使用QVariant作为参数传递时,可以使用fromValue函数避免手动转换类型,从而简化代码,提高代码可读性和可维护性。

        需要注意的是,QVariant的setValue和fromValue函数需要在类型注册到元对象系统中后才能正常使用。如果尝试将未注册的自定义类型传递给该函数,将会在编译时或运行时出现错误。因此,在使用setValue和fromValue函数之前,需要先使用Q_DECLARE_METATYPE宏将自定义类型注册到元对象系统中。

canConvert

canConvert是QVariant类的一个成员函数,用于检查QVariant对象是否可以转换为指定的类型。它接受一个Qt类型标识符作为参数,返回一个布尔值,表示是否可以将QVariant对象转换为该类型。

本文还涉及到了C++模板的知识,可以参考:

C++模板_小梁今天敲代码了吗的博客-CSDN博客

你可能感兴趣的:(#,QT,c++,开发语言,qt)