一、前语
前面咱们了解了关于Qt字符串的一些简略操作,容器类的分类和各自的主要特点以及用处,这一次咱们了解一些常见的东西类和常见的控件。
二、QByteArry和QVariant
2.1 QByteArry
关于QByteArry,咱们在上篇中从前看到过。QByteArry和QString的功用和API根本类似,具有许多类似的函数。不同的当地在于QByteArry能够存储原生的二进制数据和8位编码的文本数据,那么何为原生的二进制数据和8为编码的文本数据呢?略微了解计算机原理的童鞋或许都知道,计算机内部一切的数据都是以0和1的方式进行存储的,这种存储方式便是二进制。关于这些二进制代码,计算机并不知道其详细的意义,需求经过上下文进行决议。关于文件而言,即使是一个文本文件,读出时也能够依照二进制的方式读出,这便是二进制格局。如果把这些二进制中的0和1依照编码解说成一个个的字符,就能够构成一个文本了。因而,QByteArry实际上朐生的二进制,也能够看作是文本,具有文本的一些操作。可是关于文本字符流的操作,仍是主张运用QString而不是QByteArry,由于QString支撑Unicode。
出于便利,QByteArry主动的确保最终一个字节之后的那位的值是“\0”,这样也导致QByteArry能够简单的转变为const char*,相同作为存储二进制的数据类型,QByteArry中心也能够存储“\0”。
2.2 QVariant
有时候咱们期望将不同类型的数据存储在一个变量中,如果是在Java中能够经过Object类型的变量完成,可是C++中没有这种公有承继的类。Qt经过声明一个类,这个类包含一切需求存储的数据类型,这便是QVariant类。
QVariant类能够保存许多Qt的数据类型,包含QBrush、QColor、QCursor、QDataTime、QFont、QKeySequence、QPalette、QPen、QPixmap、QPoint、QRect、QRegion、QSize和QString,而且还包含根本类型,int、float等等。
Qvariant还能够保存许多的调集类型,如QMapQString,QVariant>,QStringList和QListQVariant>。其间item view classes,数据库模块和QSettings都很多运用了QVariant类,便利读写数据。
QVariant支撑嵌套存储。
1 QMapQString,QVariant>map; 2 map[int]=123; 3 map[double]=1.23; 4 map[string]=123; 5 map[color]=QColor(255,0,0); 6 qDebug()map[int]map[int].toInt(); 7 qDebug()map[double]map[double].toDouble(); 8 qDebug()map[string]map[string].toString(); 9 //运用valueT>()模版函数,获取存储在QVariant中的数据10 qDebug()map[color]map[color].valueQColro>();
咱们也能够自定义QVariant,被QVariant存储的数据类型有必要有一个默许的结构函数和一个复制结构函数,一起首要有必要运用Q_DECLARE_METATYPE()宏。一般会将这个宏放在类的声明地点头文件的下面。
1 Q_DECLARE_METATYPE(human)