QStandardItemModel类中的函数

  1. bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;

中有一个QVariant类型变量。

QVariant类类似于C++联合(union)数据类型,它不仅能够保存很多Qt类型的值,包括QColor,QBrush,QFont,QPen,QString和QSize等,也能够存放Qt的容器类型的值。Qt的很多功能都是建立在QVariant基础上的,如Qt的对象属性及数据库功能等。

DEMO

  1. #include "widget.h"
  2. #include <QDebug>
  3. #include <QVariant>
  4. #include <QColor>
  5. Widget::Widget(QWidget *parent)
  6. : QWidget(parent)
  7. {
  8. QVariant v(709);
  9. qDebug()<<v.toInt();
  10. QVariant w("how are you!");
  11. qDebug()<<w.toString();
  12. //声明一个QMap变量map,使用字符串作为键,QVariant变量作为值
  13. QMap<QString,QVariant>map;
  14. map["int"]=709;
  15. map["double"]=709.709;
  16. map["string"]="how are you!"; //输入字符串
  17. map["color"]=QColor(255,0,0);
  18. //调用相应的转换函数并输出
  19. qDebug()<<map["int"]<<map["int"].toInt();
  20. qDebug()<<map["double"]<<map["double"].toDouble();
  21. qDebug()<<map["string"]<<map["string"].toString();
  22. qDebug()<<map["color"]<<map["color"].value<QColor>();
  23. QStringList sl; //创建一个字符串列表
  24. sl<<"A"<<"B"<<"C"<<"D";
  25. QVariant slv(sl); //将该列表保存在一个QVariant变量中
  26. //QVariant::type()函数返回存储在QVariant变量中的值的数据类型。
  27. if(slv.type() == QVariant::StringList)
  28. {
  29. QStringList list=slv.toStringList();
  30. for(int i=0;i<list.size();++i)
  31. {
  32. qDebug()<<list.at(i); //输出列表内容
  33. }
  34. }
  35. }
  36. Widget::~Widget()
  37. {
  38. }

运行结果

Qt的常用QVariant::type枚举类型变量

  1. Invalid = QMetaType::UnknownType,
  2. Bool = QMetaType::Bool,
  3. Int = QMetaType::Int,
  4. UInt = QMetaType::UInt,
  5. LongLong = QMetaType::LongLong,
  6. ULongLong = QMetaType::ULongLong,
  7. Double = QMetaType::Double,
  8. Char = QMetaType::QChar,
  9. Map = QMetaType::QVariantMap,
  10. List = QMetaType::QVariantList,
  11. String = QMetaType::QString,
  12. StringList = QMetaType::QStringList,
  13. ByteArray = QMetaType::QByteArray,
  14. BitArray = QMetaType::QBitArray,
  15. Date = QMetaType::QDate,
  16. Time = QMetaType::QTime,
  17. DateTime = QMetaType::QDateTime,
  18. Url = QMetaType::QUrl,
  19. Locale = QMetaType::QLocale,
  20. Rect = QMetaType::QRect,
  21. RectF = QMetaType::QRectF,
  22. Size = QMetaType::QSize,
  23. SizeF = QMetaType::QSizeF,
  24. Line = QMetaType::QLine,
  25. LineF = QMetaType::QLineF,
  26. Point = QMetaType::QPoint,
  27. PointF = QMetaType::QPointF,
  28. RegExp = QMetaType::QRegExp,
  29. RegularExpression = QMetaType::QRegularExpression,
  30. Hash = QMetaType::QVariantHash,
  31. EasingCurve = QMetaType::QEasingCurve,
  32. Uuid = QMetaType::QUuid,
  33. ModelIndex = QMetaType::QModelIndex,
  34. PersistentModelIndex = QMetaType::QPersistentModelIndex,
  35. LastCoreType = QMetaType::LastCoreType,
  36. Font = QMetaType::QFont,
  37. Pixmap = QMetaType::QPixmap,
  38. Brush = QMetaType::QBrush,
  39. Color = QMetaType::QColor,
  40. Palette = QMetaType::QPalette,
  41. Image = QMetaType::QImage,
  42. Polygon = QMetaType::QPolygon,
  43. Region = QMetaType::QRegion,
  44. Bitmap = QMetaType::QBitmap,
  45. Cursor = QMetaType::QCursor,
  46. KeySequence = QMetaType::QKeySequence,
  47. Pen = QMetaType::QPen,
  48. TextLength = QMetaType::QTextLength,
  49. TextFormat = QMetaType::QTextFormat,
  50. Matrix = QMetaType::QMatrix,
  51. Transform = QMetaType::QTransform,
  52. Matrix4x4 = QMetaType::QMatrix4x4,
  53. Vector2D = QMetaType::QVector2D,
  54. Vector3D = QMetaType::QVector3D,
  55. Vector4D = QMetaType::QVector4D,
  56. Quaternion = QMetaType::QQuaternion,
  57. PolygonF = QMetaType::QPolygonF,
  58. Icon = QMetaType::QIcon,
  59. LastGuiType = QMetaType::LastGuiType,
  60. SizePolicy = QMetaType::QSizePolicy,
  61. UserType = QMetaType::User,
  62. LastType = 0xffffffff // need this so that gcc >= 3.4 allocates 32 bits for Type

Qt的QVariant类的更多相关文章

  1. QVariant类学习(非常强大的类型,甚至能处理QMap<QString ,QVariant>)

    详细描述: QVariant类作为一个最为普遍的Qt数据类型的联合. 因为c++禁止没有构造函数和析构函数的联合体,许多继承的Qt类不能够在联合体当中使用.(联合体当中的变量共用一个存储区),没有了联 ...

  2. QVariant类及QVariant与自定义数据类型转换的方法

    这个类型相当于是Java里面的Object,它把绝大多数Qt提供的数据类型都封装起来,起到一个数据类型“擦除”的作用.比如我们的 table单元格可以是string,也可以是int,也可以是一个颜色值 ...

  3. QVariant类

    QVariant类: #include "widget.h" #include <QApplication> #include <QDebug> int m ...

  4. Qt 的QString类的使用

    Qt的QString类提供了很方便的对字符串操作的接口. 使某个字符填满字符串,也就是说字符串里的所有字符都有等长度的ch来代替. QString::fill ( QChar ch, int size ...

  5. 用 Qt 的 QAudioOutput 类播放 WAV 音频文件

    用 Qt 的 QAudioOutput 类播放 WAV 音频文件 最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件. 如果只是播放 wav 文件, ...

  6. Qt 学习之路 2(73):Qt 线程相关类

    Home / Qt 学习之路 2 / Qt 学习之路 2(73):Qt 线程相关类 Qt 学习之路 2(73):Qt 线程相关类  豆子  2013年11月26日  Qt 学习之路 2  7条评论 希 ...

  7. QT隐含共享类 QSharedData QSharedDataPointer

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/davidsu33/article/details/28857391 QT中非常多类都实现了隐含共享比 ...

  8. Qt Widgets——动作类与小部件菜单项

    本文主要涉及以下三个类: QAction ——QWidgetAction QActionGroup QAction可称为动作类,它一般可当作菜单中的项组成菜单,也可作为工具栏上的按钮,它主要由图标.文 ...

  9. Qt的QSettings类和.ini文件读写

    Detailed Description QSettings类提供了持久的跨平台的应用程序设置.用户通常期望应用程序记住它的设置(窗口大小.位置等)所有会话.这些信息通常存储在Windows系统注册表 ...

随机推荐

  1. Golang 数组和字符串之间的相互转换[]byte/string

    package main import ( "fmt" ) func main() { str := "hello" arr := []byte(str) fm ...

  2. 【题解】Luogu P2146 [NOI2015]软件包管理器

    题面:https://www.luogu.org/problemnew/lists?name=2146 这道题要用树链剖分,我博客里有对树链剖分的详细介绍 这道题就是树链剖分的模板,详细解释见程序. ...

  3. 初识 GitHub

    初识 GitHub 一.注册账号 GitHub 官网:https://github.com/ 点击右上角sign up,进行注册,注册界面如下: 填写用户名,邮箱地址,密码,下滑点击绿色按钮:Crea ...

  4. 获取RadioButton选中的值

    1.RadioButtonList的RepeatDirection="Horizontal"可以设置按扭选项横对齐: 2.获取选中的RadioButton值; $("#& ...

  5. 2018-2019-1 20189206 《Linux内核原理与分析》第六周作业

    linux内核分析学习笔记 --第五章 系统调用的三层机制 学习重点--深入理解系统调用的过程 给MenuOS添加命令 添加命令的方式较为简单,在LinuxKernel/menu/test.c目录下, ...

  6. 2018年湘潭大学程序设计竞赛G又见斐波那契

    链接:https://www.nowcoder.com/acm/contest/105/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  7. topcoder srm 690 div1 -3

    1.给定一个数字$N$,从1到100的100个数字中选出$K$个数字(设为集合$S$),然后对$S$进行如下运算: (1)删除$S$中的某些数字:(可以删除0个数字) (2)将$S$中的某些数字取为它 ...

  8. 【索引失效】什么情况下会引起MySQL索引失效

    索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 注意:要想使用or,又想让索引生效,只能将or条件 ...

  9. LOJ6284 数列分块入门8(分块)

    两个锅 一个是sametag[i]==c 另一个是a[j]不要写成a[i] #include <cstdio> #include <cstring> #include < ...

  10. promise对象的使用

    ES6中的promise的出现给我们很好的解决了回调地狱的问题,在使用ES5的时候,在多层嵌套回调时,写完的代码层次过多,很难进行维护和二次开发,ES6认识到了这点问题, 现在promise的使用,完 ...