首先看一看QVariant这个类,我们可以把它当做一个万能数据类型,需要的时候能转换为一种特定的类型。

使用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笔记之Q_DECLARE_METATYPE(Type)的更多相关文章

  1. QT笔记 -- (5) 实现QWidget的paintEvent函数,在widget上画背景图形

    如图,想在界面上画个弧线和直线,于是继承QWidget得到类MainContainer,并实现了paintEvent函数.然后用类MainContainer定义centralWidget. MainC ...

  2. QT笔记之解决QT5.2.0和VS2012中文乱码 以及在Qt Creator中文报错

    转载:http://bbs.csdn.net/topics/390750169 VS2012 中文乱码 1.方法一: 包含头文件 #include <QTextCodec> ....... ...

  3. QT笔记之VS开发程序遇到的问题

    转载:http://www.cnblogs.com/li-peng/p/3644812.html 转载:http://www.cnblogs.com/csuftzzk/p/VS_Qt_Experien ...

  4. QT笔记之不规则窗口的实现

    QT实现的不规则窗口,是根据图片的形状显示 1.去标题栏 2.设置窗口背景为透明色 3.最后给窗口设置背景色 注:背景图为镂空的 格式为.png 图片资源下载:http://pan.baidu.com ...

  5. Qt OpenCV Support Image Type 支持读写的图像格式

    Qt 支持的图片格式如下: Format Description Qt's support BMP Windows Bitmap Read/write GIF Graphic Interchange ...

  6. QT笔记之模态对话框及非模态对话框

    模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...

  7. QT笔记之QLineEdit自动补全以及控件提升

    转载:http://www.cnblogs.com/csuftzzk/p/qss_lineedit_completer.html?utm_source=tuicool&utm_medium=r ...

  8. QT笔记之VS2010 Qt中导入qrc资源文件

    转载1:http://qimo601.iteye.com/blog/1404693 转载2:http://blog.sina.com.cn/s/blog_92cde3060101lobm.html 转 ...

  9. QT笔记之实现阴影窗口

    方法一: 代码实现 在窗口构造函数中加入:setAttribute(Qt::WA_TranslucentBackground),保证不被绘制上的部分透明 重写void paintEvent(QPain ...

随机推荐

  1. 倍增法求LCA(最近公共最先)

    对于有根树T的两个结点u.v,最近公共祖先x=LCA(u,v)表示一个结点x,满足x是u.v的祖先且x的深度尽可能大. 如图,根据定义可以看出14和15的最近公共祖先是10,   15和16的最近公共 ...

  2. Python --判断路径是否为目录或文件

    os.path.isdir( ), os.path.isfile(),os.listdir( ), os.walk( ) 参考网址:https://blog.csdn.net/xxn_723911/a ...

  3. 通过P3P头实现跨域设置cookie

    PHP的setcookie函数可以设置域,但是只能在当前域内,如果出现多域可由如下办法处理:实现原理:www.b.com/set_cookie.php   在b域名下设置a域名的cookie < ...

  4. 基于C#简单实现多个word文件和Excel文件的全局字符串替换

    公司整理文档工作中,出现了一个需要使用全局字符替换多个word文档.excel文档中的内容的需求.虽然office.WPS都有全局替换的功能(ctrl+h),但是文件过多,且需要替换多次,工作量还是比 ...

  5. 一个狗血的mysql编码错误

    执行查询语句总是报错,某个查询语句字段编码错误. 各种修改那个表没用, 最后发现是创建schemas的时候没有加编码 应该由 CREATE SCHEMA new_schema;改为 CREATE SC ...

  6. windows下Xshell远程访问虚拟机

    下载Xshell 5软件在windows下安装 安装好后Xshell 5启动软件 下一步,检查虚拟机,配置是否正确 下一步,设置网络,保障虚拟机系统能够连接网络 下一步,进入虚拟机系统,检查虚拟机网络 ...

  7. EF Core 生成数据库

       1.运行cmd,切换到打开项目所在文件夹,输入下面的命令 dotnet ef migrations add Initial 建立并初始化数据库 dotnet ef database update ...

  8. 苹果手机的SB系列(4)你让我除了退出还能按哪个键

    我不知道,他们哪里来的自信,自己的机子就不死机?不设置重新启动? 看看下面这个界面,我按哪个键,全部是灰色的! 今天还有一事纪念,0.4m高的坠地,外屏碎掉了.

  9. 移动端根据dpr适配

    'use strict'; /** * @param {Number} [baseFontSize = 100] - 基础fontSize, 默认100px; * @param {Number} [f ...

  10. 在Mac上安装office2016(破解版)

    doffice2016下载地址: 链接:https://pan.baidu.com/s/1V6I_QQiK2VK1rf0v4aVk5g  密码:3ijf 执行破解程序: 链接:https://pan. ...