Qt学习笔记

Qt学习笔记

Qt核心特点

Qt本身并不是一种编程语言,它实质上是一个跨平台的 ** C++开发类库 。Qt 的元对象编译器(Meta-Object Compiler, MOC)是一个预处理器**。所以在编写Qt类的时候,需要添加一个Q_OBJECT宏,使编译器能够将类中的Qt特性进行处理。

元对象系统

元对象系统提供了对象之间通信的信号与槽机制,运行时类型信息和动态属性系统。
元对象由以下三个基础组成:

  1. QObject 类是所有使用元对象系统的基类。
  2. 在一个类的private部分声明Q_OBJECT宏,可以使类使用元对象的特性。
  3. MOC(元对象编译器)为每一个QObject子类提供必要的代码来实现元对象的系统特性。
    元对象还提供了其它功能,例如查询一个类的名称,判断一个对象是否为某一类,或者某一类的子类;设置一个对象的属性等。
    qobject_cast()函数可以将QObject类及其子类进行投射。
    例如QMyWidget类继承于QWidget类,并在声明中加入了Q_OBJECT宏,那么可以使用下面的语句:
QObject *obj = new QMyWidget;
//变量由QObject 定义,但是实际上指向了QMyWidget类,所以可以使用下面的投射
QWidget *widget = qobject_cast<QWidget *>(obj);

属性系统

Q_PROPERTY()宏可以定义属性,同样也是基于元对象系统实现的。属性的定义在子类的声明中。
属性的定义遵从一定的格式,例如

Q_PROBERTY(bool focus READ hasFocus);//定义了一个属性focus ,并设定读取函数是hasFocus。

但是不管属性的定义中有没有使用READ或WRITE关键字,都可以用QObject::property()读取属性,用QObject::setproperty()设置属性。例如:

QPushButton *button = new QPushButton;
QObject *object = button;
object->setproperty("flat",true);
object->property("flat");

对于一些没有在定义中声明的属性,可以在对象实例化以后,使用QObject::setproperty()将其设定为动态属性,同样可以用QObject::property()获取属性的值。
类的属性系统还可以用宏Q_CLASSINFO()来为元对象设定名称——值信息,并使用classinfo(int),获取某个附加信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值