Qt 3 QVariant类的使用和实例

news2024/12/28 21:12:27
QVariant, 类本质为 C++联合(Union)数据类型,它可以保存很多Qt 类型的值,包括 QBrush、QColor、QString 等等。也能够存放Qt的容器类型的值。QVariant::StringList 是 Qt定义的一个 QVariant::type 枚举类型的变量,其他常用的枚举类型变量如下表所示:

在这里插入图片描述
mainwindow.h 头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

// 定义学生结构体类型
struct Student
{
    Student() {}
    int ino;
    QString name;
    int score;

};
Q_DECLARE_METATYPE(Student)
/*
Q_DECLARE_METATYPE 是一个宏,用于在Qt中声明自定义数据类型,
以便能够在信号和槽之间传递这些类型的数据。通过使用 Q_DECLARE_METATYPE 宏,
可以告诉Qt元对象系统如何处理自定义数据类型,使其能够被正确地序列化和反序列化,
从而能够在不同线程之间传递。这样,我们就可以在Qt应用程序中使用自定义数据类型作为信号和槽的参数,
而不需要手动实现数据类型的序列化和反序列化操作。
*/

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
};
#endif // MAINWINDOW_H

mainwindow.cpp文件

    // 实例化一个QVariant 实例化时候传入一个整形
    QVariant qv1(798);
    // 输出这个整形
    qDebug() << qv1.toInt();
    // 实例化一个QVariant 实例化时候传入一个字符串
    QVariant qv2("你好");
    // 输出这个字符串
    qDebug() << qv2.toString();
    // 使用qmap 尝试用QVariant使用多个类型的值
    QMap <QString,QVariant> qmap;
    qDebug() << endl;
    qmap["int"] = 20000; // 整形
    qmap["double"] = 8.88; // 浮点型
    qmap["string"] = "你好"; // 字符串
    qmap["color"] = QColor(255,255,0); // 其他类型
    // 使用for 循环打印
    for (auto a : qmap) {
        qDebug() << a << endl;

    }
    /* 输出结果
    QVariant(QColor, QColor(ARGB 1, 1, 1, 0))

    QVariant(double, 8.88)

    QVariant(int, 20000)

    QVariant(QString, "你好")
    */
    qDebug() << endl;

    // 创建一个字符串列表
    QStringList qsl;
    qsl << "a" << "b" << "c" << "e";

    // 保存到QVariant中
    QVariant qvsl(qsl);
    if (qvsl.type() == QVariant::StringList)
    {
        // 先进行类型转换
        QStringList l = qvsl.toStringList();
        // 使用for 循环打印输出
        for(auto a : l)
        {
            qDebug() << a ;
        }
        /* 输出结果
        "a"
        "b"
        "c"
        "e"
        */
    }


    // 应用结构体类型 和 QString
    qDebug() << endl;
    Student stu;
    stu.ino = 22022120;
    stu.name = "di";
    stu.score = 99;

    // 使用静态方法保存数据
    // 需要在头文件中使用 Q_DECLARE_METATYPE 宏 声明结构体 不然会报错
    QVariant qvstu = QVariant::fromValue(stu);
    // 判断类型是否能转换
    if(qvstu.canConvert<Student>())
    {
        // 创建新的实例获取数据
        Student s1 = qvstu.value<Student>();
        // 第二种获取数据的方法
        Student s2 = qvariant_cast<Student>(qvstu);
        qDebug() <<s1.ino;
        qDebug() <<s1.name;
        qDebug() <<s1.score;

    }
    /* 输出结果
    22022120
    "di"
    99
    */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1596858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《QT实用小工具·二十五》日志重定向输出

1、概述 源码放在文章末尾 日志重定向输出&#xff0c;包含如下功能&#xff1a; 支持动态启动和停止。支持日志存储的目录。支持网络发出打印日志。支持输出日志上下文信息比如所在代码文件、行号、函数名等。支持设置日志文件大小限制&#xff0c;超过则自动分文件&#xf…

FreeBuf 全球网络安全产业投融资观察(3月)

综述 据不完全统计&#xff0c;2024年3月&#xff0c;全球网络安全市场共发生投融资事件53起&#xff0c;其中国内4起&#xff0c;国外49起。 3月全球络安全产业投融资统计表&#xff08;数据来源&#xff1a;航行资本、36氪&#xff09; 整体而言&#xff0c;国内4起投融资事…

强化学习-Reinforcement learning | RL

目录 什么是强化学习? 强化学习的应用场景 强化学习的主流算法 强化学习是机器学习的一种学习方式,它跟监督学习、无监督学习是对应的。本文将详细介绍强化学习的基本概念、应用场景和主流的强化学习算法及分类。 什么是强化学习? 强化学习并不是某一种特定的算法,而是…

Python数据容器(一)

一.数据容器入门 1.Python中的数据容器&#xff1a;一种可以容纳多份数据的数据类型&#xff0c;容纳的每一份数据称之为1个元素&#xff0c;每一个元素&#xff0c;可以是任意类型的数据&#xff0c;如字符串、数字、布尔等。 2.数据容器根据特点的不同&#xff0c;如&#…

boot https ssl

生成命令&#xff1a; keytool -importkeystore -srckeystore D:\sslTest.keystore -destkeystore D:\sslTest.keystore -deststoretype pkcs12keytool -genkeypair -alias "sslTestKey" -keyalg "RSA" -keystore "D:\sslTest.keystore"yml: s…

Shiro配置类中的各个配置项浅谈

背景&#xff1a; 上文中在落地实践时&#xff0c;对Shiro进行了相关的配置&#xff0c;并未对其含义作用进行详细学习&#xff0c;本章将进一步详解其作用含义。 Shiro配置类中的各个配置项的作用&#xff1a; Bean public SecurityManager securityManager() { Default…

初识集合框架

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x1f…

分享2024 golang学习路线

写在前面 Go语言&#xff08;也称为Golang&#xff09;是Google开发的一种静态强类型、编译型语言&#xff0c;它具有简洁、快速、安全、并发等特点&#xff0c;尤其适合构建大型软件、微服务架构和云平台服务。Go的学习曲线相对平缓&#xff0c;社区活跃&#xff0c;是现代编…

吴恩达llama课程笔记:第四课提示词技术

羊驼Llama是当前最流行的开源大模型&#xff0c;其卓越的性能和广泛的应用领域使其成为业界瞩目的焦点。作为一款由Meta AI发布的开放且高效的大型基础语言模型&#xff0c;Llama拥有7B、13B和70B&#xff08;700亿&#xff09;三种版本&#xff0c;满足不同场景和需求。 吴恩…

在Windows上配置VS Code GO语言开发环境

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

上岸必看:C++ 24校招/25实习求职指南

校招和实习是应届生步入职场的重要途径&#xff0c;是职业生涯的起点。 通过实习和校招进入的岗位&#xff0c;C应届生能够更好地了解行业现状&#xff0c;明确自己的职业兴趣和发展方向。有的时候&#xff0c;实际工作中的体验甚至会引导你重新考虑和规划自己的职业道路。 并…

Mac下载的软件显示文件已损坏,如何解决文件已损坏问题

当在Mac上下载的软件显示文件已损坏时&#xff0c;这可能是因为多种原因导致的&#xff0c;包括网络问题、下载中断、软件未完整下载、文件传输错误等。解决这个问题需要采取一些步骤来排除可能的原因&#xff0c;并尝试修复文件。下面将详细介绍一些常见的解决方法&#xff1a…

算法课程笔记——排序

Bool返回真假 为何用const不用define 1.保护被修饰的东西 2.通常不分配存储空间&#xff0c; 效率高 匿名函数只在一处用&#xff0c;其他处用不到 不写&就是拷贝 u相等就u&#xff0c;不等就v 一个字符是空格一个是换行&#xff0c;后面是取下标i那就是1&#xff08;true&…

利用vite创建vue项目

创建vue项目步骤 打开HBuilder X工具&#xff0c;创建空白项目 进入终端(鼠标点击文件进行选择&#xff0c;然后终端) 利用vite脚手架创建项目 &#xff08;前提要将HBuilder X工具属性设为管理员运行状态&#xff08;属性》兼容》管理员身份运行此程序&#xff09; npm …

CentOS如何使用Docker部署Plik服务并实现公网访问本地设备上传下载文件

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问&#xff0c;实现随时随地在任意设备上传或者…

pnpm 使用 workspace 报错 ERR_INVALID_THIS

有时候真的感觉如果有一个老师指路&#xff0c;那么遇到的坑真的会少很多。 错误示例&#xff1a; GET https://registry.npmjs.org/rollup%2Fplugin-typescript error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.原因是什么&#xff1f;原因就是 pnpm 的…

MySQL表空间管理与优化(8/16)

表空间管理和优化 innodb_file_per_table参数&#xff08;此参数在分区表章节中还会出现&#xff09;&#xff1a; 这个参数决定了InnoDB表数据的存储方式。当参数设置为ON时&#xff0c;每个InnoDB表的数据会单独存储在一个以.ibd为后缀的文件中&#xff0c;这有利于管理和回收…

python数据结构与算法之线性表

1、线性表 是一种由n个元素&#xff08;n> 0 &#xff09;数据元素组成的有限序列&#xff0c;所包含的元素数量通常被称为表的长度 n 0 的表被称为空表&#xff0c;线性表的数据元素可以单一也可以复杂&#xff0c;可以是整数&#xff0c;字符串&#xff0c;也可以是由几…

活动预告|NineData 创始人CEO叶正盛将参加QCon全球软件开发大会,共话AI大模型技术在数据库DevOps的实践

4月13日下午&#xff0c;NineData创始人&CEO叶正盛即将参加InfoQ中国主办的『QCon全球软件开发大会北京站』的技术大会。在本次技术峰会上&#xff0c;叶正盛将以《AI大模型技术在数据库DevOps的实践》为主题&#xff0c;深入剖析AI大模型技术在数据库DevOps领域的最新进展…

Zookeeper的集群搭建和ZAB协议详解

Zookeeper的集群搭建 1&#xff09;zk集群中的角色 Zookeeper集群中的节点有三个角色&#xff1a; Leader&#xff1a;处理集群的所有事务请求&#xff0c;集群中只有一个LeaderFollwoer&#xff1a;只能处理读请求&#xff0c;参与Leader选举Observer&#xff1a;只能处理读…