当前位置: 首页 > news >正文

Qt QVariant类应用

QVariant类

QVariant类本质为C++联合(Union)数据类型,它可以保存很多Qt类型的值,包括 QBrush,QColor,QString等等,也能存放Qt的容器类型的值。

QVariant::StringList 是 Qt 定义的一个 QVariant::type 枚举类型的变量,其他常用的枚举类型变量如下表所示:

代码如下:

main.cpp

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>struct student
{int iNo;QString strName;int score;
};
Q_DECLARE_METATYPE(student);class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"#include <QVariant>
#include <QDebug>
#include <QColor>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{QVariant qv1(298);qDebug()<<"qv1:"<<qv1.toInt();QVariant qv2("Hello World!");qDebug()<<"qv2:"<<qv2.toString();QMap<QString,QVariant> qmap;qDebug()<<endl;qmap["int"]=20000;  // 整型qmap["double"]=99.88;  // 浮点型qmap["string"]="GoodBye";  // 字符串qmap["color"]=QColor(255,255,0);  // QColor类型// 输出:转换函数来处理qDebug()<<qmap["int"]<<qmap["int"].toInt();qDebug()<<qmap["double"]<<qmap["double"].toDouble();qDebug()<<qmap["string"]<<qmap["int"].toString();qDebug()<<qmap["color"]<<qmap["int"].value<QColor>();// 创建一个字符串列表:QStringListqDebug()<<endl;QStringList qsl;qsl<<"A"<<"B"<<"C"<<"D"<<"E"<<"F";QVariant qvsl(qsl);    // 将列表存储在一个QVariant变量if(qvsl.type()==QVariant::StringList){QStringList qlist=qvsl.toStringList();for(int i=0;i<qlist.size();i++){qDebug()<<qlist.at(i);  // 输出列表数据信息}}// 结构体类型和QVariant类配合使用qDebug()<<endl;student stu;stu.iNo=202221;stu.strName="sunny";stu.score=715;// 使用静态方法保存数据QVariant qstu=QVariant::fromValue(stu);if(qstu.canConvert<student>()){student temp=qstu.value<student>();         //获取数据student qtemp=qvariant_cast<student>(qstu); // 获取数据qDebug()<<"student:iNo="<<temp.iNo<<",strName="<<temp.strName<<".score="<<temp.score;qDebug()<<"student:iNo="<<qtemp.iNo<<",strName="<<qtemp.strName<<".score="<<qtemp.score;}}MainWindow::~MainWindow()
{
}
  • QVariant::fromValue()函数将自定义的student结构体对象stu转换为QVariant对象qstu。
  • qstu.canConvert()函数检查QVariant对象qstu是否可以转换为student类型。
  • student temp = qstu.value()将QVariant对象qstu转换为student类型,并将结果赋值给temp。
  • student qtemp = qvariant_cast(qstu)也可以将QVariant对象qstu转换为student类型,并将结果赋值给qtemp。
  • 最后,通过qDebug()输出转换后的student对象temp和qtemp的成员变量值。

结果如下:

http://www.lryc.cn/news/298307.html

相关文章:

  • 不到1s生成mesh! 高效文生3D框架AToM
  • Mac中管理多版本Jdk
  • 用C语言列出Linux或Unix上的网络适配器
  • 单片机学习笔记---LED点阵屏显示图形动画
  • Git分支常用指令
  • 3.3 Binance_interface APP U本位合约行情-实时行情
  • 机器学习——流形学习
  • 离线数仓(一)【数仓概念、需求架构】
  • 物联网测试:2024 年的最佳实践和挑战
  • 蓝桥杯Web应用开发-CSS3 新特性
  • MongoDB聚合:$unionWith
  • 人工智能三子棋-人机对弈-人人对弈,谁会是最终赢家?
  • 【leetcode热题100】反转链表 II
  • 谷歌 DeepMind 联合斯坦福推出了主从式遥操作双臂机器人系统增强版ALOHA 2
  • 金融行业专题|证券超融合架构转型与场景探索合集(2023版)
  • 【C语言】C的整理记录
  • 使用STM32Cubemx创建一个工程并且给出每一步的含义
  • C/C++模板初阶
  • linux系统下vscode portable版本的c++/Cmake环境搭建001
  • 【QT+QGIS跨平台编译】之三十一:【FreeXL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • 2024年 前端JavaScript入门到精通 第一天
  • 155基于matlab 的形态学权重自适应图像去噪
  • 操作系统——内存管理(附带Leetcode算法题LRU)
  • I/O多路复用简记
  • SPECCPU2017操作说明
  • openresty (nginx)快速开始
  • 相机图像质量研究(11)常见问题总结:光学结构对成像的影响--像差
  • 【深度学习】基于多层感知机的手写数字识别
  • 给定n,m(200),构造一个n*m的矩阵a,使得每个4*4的子矩阵,左上角2*2的子矩阵的异或和等于右下角的,左下角的异或和等于右上角的
  • 【开源】基于JAVA+Vue+SpringBoot的假日旅社管理系统