Qt笔记之Q_DECLARE_METATYPE(Type)
2016-05-12 21:05
357 查看
首先看一看QVariant这个类,我们可以把它当做一个万能数据类型,需要的时候能转换为一种特定的类型。
使用canConvert()函数检查是否能转换为你想要的数据类型,结构为:bool QVariant::canConvert() const,返回值为布尔型,为真时表示可以转换相应的类型。
使用bool QVariant::convert(int targetTypeId)将数据转换为特定类型,返回值为真时表示转换成功。
要获得数据的值时使用to.T()函数即可,返回一个数值。
下来看看Qt元类型,QMetaType Class这个类管理元对象系统的类,看了官方的英文文档,我是这样理解的,它可以给一个自定义的类起一个id,然后在创建一个指向自定义类的指针,可以随时随地的动态删除和添加,源码如下:
但如果你想使一个自定义的类能够在万能数据类QVariant中使用,就得使用Q_DECLARE_METATYPE(Type)宏进行修饰,其中你的类必须包含该类型必须有公有的 构造、析构、复制构造 函数,如果想在(queued)信号和槽系统中使用或者想在QObject的属性系统中使用,就必须使用qRegisterMetaType()这个函数注册到元对象系统中,这个在qml中调用C++时常用到。
使用canConvert()函数检查是否能转换为你想要的数据类型,结构为:bool QVariant::canConvert() const,返回值为布尔型,为真时表示可以转换相应的类型。
使用bool QVariant::convert(int targetTypeId)将数据转换为特定类型,返回值为真时表示转换成功。
要获得数据的值时使用to.T()函数即可,返回一个数值。
下来看看Qt元类型,QMetaType Class这个类管理元对象系统的类,看了官方的英文文档,我是这样理解的,它可以给一个自定义的类起一个id,然后在创建一个指向自定义类的指针,可以随时随地的动态删除和添加,源码如下:
int id = QMetaType::type("MyClass"); if (id != QMetaType::UnknownType) { void *myClassPtr = QMetaType::create(id); ... QMetaType::destroy(id, myClassPtr); myClassPtr = 0; }
但如果你想使一个自定义的类能够在万能数据类QVariant中使用,就得使用Q_DECLARE_METATYPE(Type)宏进行修饰,其中你的类必须包含该类型必须有公有的 构造、析构、复制构造 函数,如果想在(queued)信号和槽系统中使用或者想在QObject的属性系统中使用,就必须使用qRegisterMetaType()这个函数注册到元对象系统中,这个在qml中调用C++时常用到。
相关文章推荐
- qt creator编译opus库
- Qt_5_3_MSVC2012-编译QFtp-qt5编译QFtp
- qt条件编译debug和release版本--qmake之CONFIG(debug, debug|release)
- Qt 工程 pro文件
- 关于QT调用MFC动态库时传递中文字符乱码问题
- QT绘图应用2:利用Qt绘制直方图和分位数图
- Qt +Opencv 在ARM-A9上视频拍照
- 摄像头采集QT5显示和分辨率适配
- Qt笔记-const-虚函数-元对象系统
- Qt笔记-const-虚函数-元对象系统
- Qt使用QMediaplayer类做音频播放器
- osg for Qt5.5.0 运行“cow.osg”出错" Undefined symbols for architecture x86_64"
- QT之快捷键操作
- Qt Qss 笔记
- qt+opencv3.0配置
- qt tableb view 打印预览和打印的问题 个人解决办法
- 设置QT鼠标右击菜单
- qt的验证器QValidator
- Ubuntu10.04下安装Qt4和创建第一个Qt程序
- Qt树形控件QTreeView使用2——复选框的设置