Qt 4开发实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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"