3.3 QVariant类
QVariant类类似于C++的联合(union)数据类型,它能够保存很多Qt类型的值,包括QColor、QBrush、QFont、QPen、QRect、QString、QSize等,也能够存放Qt的容器类型的值。Qt的很多功能都是建立在QVariant基础上的,比如Qt的对象属性以及数据库功能等。
下面举例介绍QVariant类的用法。具体内容如下:
#include <QDebug> #include <QVariant> #include <QColor> int main(int argc,char *argv[]) { QVariant v(709); qDebug()<<v.toInt(); v.QVariant("How are you! "); qDebug()<<v.toString(); QMap<QString,QVariant>map; map["int"]=709; map["double"]=709.709; map["string"]="How are you! "; map["color"]=QColor(255,0,0); qDebug()<<map["int"]<< map["int"].toInt(); qDebug()<<map["double"]<< map["double"].toDouble(); qDebug()<<map["string"]<< map["string"].toString(); qDebug()<<map["color"]<< map["color"].value<QColor>(); QStringList sl; sl<<"A"<<"B"<<"C"<<"D"; QVariant slv(sl); if(slv.type()==QVariant::StringList) { QStringList list=slv.toStringList(); for(int i=0;i<list.size();++i) qDebug()<<list.at(i); } return 0; }
其中:
● QVariant v(709):声明一个QVariant变量v,并初始化为一个整数。此时,QVariant变量v包含了一个整数变量。
● qDebug()<<v.toInt():调用QVariant::toInt()函数将QVariant变量包含的内容转换为整数并输出。
● v.QVariant("How are you! "):改变QVariant变量v包含的内容为一个字符串。
● qDebug()<<v.toString():调用QVariant::toString()函数转换为要输出的字符串。
● QMap<QString,QVariant>map:声明一个QMap变量map,使用字符串作为键, QVariant变量作为值。
● map["int"]=709:输入整数型。
● map["double"]=709.709:输入浮点型。
● map["string"]="How are you! ":输入字符串。
● map["color"]=QColor(255,0,0):输入QColor类型的值。
● qDebug()<<…:调用相应的转换函数并输出。
● qDebug()<<map["color"]<< map["color"].value<QColor>():在QVariant变量中保存了一个QColor对象,并使用模板QVariant::value()还原为QColor,然后输出。由于QVariant是QtCore模块的类,因此它没有为QtGui模块中的数据类型(例如QColor、QImage以及QPixmap等)提供转换函数,因此需要使用QVariant::value()函数或者使用qVariantValue()模块函数。
● QStringList sl:创建一个字符串列表。
● QVariant slv(sl):将该列表保存在一个QVariant变量中。
● qDebug()<<list.at(i):输出列表内容。
● if(slv.type()==QVariant::StringList):QVariant::type()函数返回存储在QVariant变量中的值的数据类型。QVariant::StringList是Qt定义的一个QVariant::type枚举类型的变量,其他常用的类型枚举变量如表3.7所示。
表3.7 Qt常用QVariant::type枚举类型的变量
● 最后,运行上述程序的结果如下:
709 "How are you! " QVariant(int,709) 709 QVariant(double,709.709) 709.709 QVariant(QString, "How are you! ") "How are you! " QVariant(QColor, QColor(ARGB 1,1,0,0)) QColor(ARGB 1,1,0,0) "A" "B" "C" "D"