在Qt中,QVariant是一个通用的值容器,它可以存储任意类型的数据,例如整数、字符串、列表等等。其主要用于提供一种通用的数据类型,方便在不同的函数、类、模块之间传递数据。
QVariant类是Qt的共用体union数据类型,不仅能保存很多Qt类型的值,包括QColor、QBrush、QFont、QRect、QString及QSize等等,而且能存放Qt的容器类型值。可采用toT()将QVariant对象转换称为T类型并获取其值。如toInt()、toFloat()、toString(),可用type()方法获取数据类型,判断数据是否可。对于GUI模块中定义的数据类型没有相应的转换函数,即没有toColor()、没有toImage()这样的函数提供,可通过value()方法实现转换,判断两种类型是否可以转换时可通过canConvert()方法的返回值判断。
因此,虽然QVariant是Qt Core库的一部分,但并未提供对Qt GUI模块中定义的数据类型(如QColor、QImage、QPixmap等)进行转换的函数。不过,可以使用QVariant::value()函数或者qvariant_cast()模板函数来完成这样的转换。
//整型QVariant vNum(100);qDebug()<<vNum.toInt();//浮点型QVariant vPI(3.1415f);qDebug()<<vPI.toFloat();//字符型QVariant vStr("hello!");qDebug()<<vStr.toString();//boolQVariant vB(true);qDebug()<<vB.toBool();//颜色QColor c = QColor(Qt::red);QVariant vC =c;qDebug()<<vC.type();qDebug()<<vC.value<QColor>();QVariant vss = vStr;//QVariant vss = 1000;//返回数据类型转换的能力qDebug()<< vss.canConvert(QVariant::Int);qDebug()<<vss.toString();//转换成功的条件:有转换能力且数据类型匹配qDebug()<<vss.convert(QVariant::Int);qDebug()<<vss.toString();//关闭对话框QTimer::singleShot(0,qApp,SLOT(quit()));