QT中的元对象系统(一):QVariant的简单说明
2010-10-26 10:16
363 查看
原创文章,转载请注明出处,谢谢!
作者:清林,博客名:飞空静渡
QVariant可以表示QT中的大部分类型,它和pascal中的variant类型或c中的void类型有点相似,不过它的使用和c中的union类似,其实现也是用union,在qvariant.h头文件中,我们可以看到这样定义:
我们可以用type()成员函数来返回它的类型:Type
QVariant::type () const
。
为了取得它的值,我们可以用类似的toT()这样的函数来取得,如toInt()、toString()等。
基本的使用如下:
QViriant支持空值的使用,你可以定义一个空的QViriant,并在后面才给它赋值。
QVariant是定义在QtCore库中的,前面说的qvariant.h就在QtCore目录下,因此它不提供类似于toInt()、toString()这样的函数去转化QtGui中的类型,如QColor、QImage和QPixmap等。但你可以使用
QVariant::value()或者
qVariantValue
()模板函数转化。
相反的赋值就可以这样:
你可以使用
canConvert()
确定是否可以转化。
作者:清林,博客名:飞空静渡
QVariant可以表示QT中的大部分类型,它和pascal中的variant类型或c中的void类型有点相似,不过它的使用和c中的union类似,其实现也是用union,在qvariant.h头文件中,我们可以看到这样定义:
class Q_CORE_EXPORT QVariant { public: enum Type { Invalid = 0, Bool = 1, Int = 2, UInt = 3, LongLong = 4, ULongLong = 5, ...... UserType = 127, #ifdef QT3_SUPPORT IconSet = Icon, CString = ByteArray, PointArray = Polygon, #endif LastType = 0xffffffff // need this so that gcc >= 3.4 allocates 32 bits for Type }; inline QVariant(); ............... }
我们可以用type()成员函数来返回它的类型:Type
QVariant::type () const
。
为了取得它的值,我们可以用类似的toT()这样的函数来取得,如toInt()、toString()等。
基本的使用如下:
QDataStream out(...); QVariant v(123); // The variant now contains an int int x = v.toInt(); // x = 123 out << v; // Writes a type tag and an int to out v = QVariant("hello"); // The variant now contains a QByteArray v = QVariant(tr("hello")); // The variant now contains a QString int y = v.toInt(); // y = 0 since v cannot be converted to an int QString s = v.toString(); // s = tr("hello") (see QObject::tr()) out << v; // Writes a type tag and a QString to out ... QDataStream in(...); // (opening the previously written stream) in >> v; // Reads an Int variant int z = v.toInt(); // z = 123 qDebug("Type is %s", // prints "Type is int" v.typeName()); v = v.toInt() + 100; // The variant now hold the value 223 v = QVariant(QStringList());
QViriant支持空值的使用,你可以定义一个空的QViriant,并在后面才给它赋值。
QVariant x, y(QString()), z(QString("")); x.convert(QVariant::Int); // x.isNull() == true // y.isNull() == true, z.isNull() == false // y.isEmpty() == true, z.isEmpty() == true
QVariant是定义在QtCore库中的,前面说的qvariant.h就在QtCore目录下,因此它不提供类似于toInt()、toString()这样的函数去转化QtGui中的类型,如QColor、QImage和QPixmap等。但你可以使用
QVariant::value()或者
qVariantValue
()模板函数转化。
QVariant variant; ... QColor color = variant.value<QColor>();
相反的赋值就可以这样:
QColor color = palette().background().color(); QVariant variant = color;
你可以使用
canConvert()
确定是否可以转化。
相关文章推荐
- QT中的元对象系统(一):QVariant的简单说明
- QT中的元对象系统(一):QVariant的简单说明
- QT中的元对象系统(一):QVariant的简单说明
- QT中的元对象系统(一):QVariant的简单说明 收藏
- QT中的元对象系统(一):QVariant的简单说明
- Qt Q_DECLARE_METATYPE说明——让自定义的类型设置到QVariant
- (一) Qt Model/View 的简单说明
- 关于虚函数和 Qt 的 Event 函数的简单说明
- (一) Qt Model/View 的简单说明
- QT中正则表达式的简单说明
- 关于QT/C++中explicit关键字和构造函数的*parent参数的简单说明
- Qt Model/View 的简单说明
- (一) Qt Model/View 的简单说明
- Qt——QPlainTextEdit简单说明
- QT中正则表达式的简单说明
- Qt Model/View 的简单说明
- QT中PRO文件的简单说明(网络模块应用注意事项)
- 关于虚函数和 Qt 的 Event 函数的简单说明
- (一) Qt Model/View 的简单说明
- QtAssitant(Qt5.2.1)中与Qt的元对象系统和事件机制相关的几个重要段落或函数说明