QT学习之四:元对象系统

1.元对象系统简介

在Qt的学习中,应该先学习元对象系统再学习信号与槽

因为信号与槽就是元对象系统中的一个功能,如果没有元对象系统的话,那就i用不了信号与槽了

Qt的元对象系统叫做:Meta-Object-System(简称为MOS)

元对象系统是为了Qt能够更好的兼容C++语法以及标准,元对象系统主要包含:

  1. 元对象
  2. 动态类型
  3. 类的属性信息
  4. 信号与槽

...

2.三大基础条件

元对象系统有三大基础条件:

  1. 类一定是QObject类的派生类
    (也就是说使用的类必须继承[可以是直接继承或者间接继承]QObject类才能使用元对象系统)
  2. 类一定包含Q_OBJECT宏
    (主要用来启用元对象功能更,比如:元对象、动态属性、信号与槽)
  3. 元对象编译器Meta-Object-Compiler(moc)
    (会生成包含元对象的C++文件,文件以moc开头)
    有了moc文件之后,就可以支撑信号与槽,运行时类的信息和动态属性系统的使用

3.元对象类型

元对象的类型是:QMetaObject类,它是元对象系统的核心类之一,包含了类的元信息

例如:类名、父类名、属性、信号与槽...

只要是QObject类的派生类,那么这个类内部都有一个元对象

获取类的元对象,可以获取:

  1. 获取元对象指针
    metaObject()
  2. 获取元对象变量
    staticMetaObject

new了一个按钮对象,虽然QPushButton类并不是QObject类的直接派生类

但是是间接派生类所以照样支持元对象系统,所以可以通过metaObject()来获取元对象指针

然后也可以通过staticMetaObject来获取元对象变量

可以通过这两种方式获取类的信息

换句话说元对象就是描述类的一个类型, 比如:类名、判断关系

我们通过元对象的指针,来获取类的属性

相当于元对象在描述这个类

除了访问类名以外,也可以判断继承关系

4.对象树

在Qt中所构建的图形化应用程序会涉及到很多的组件

当在类中定义了组件的指针对象,需要在构造函数中进行实例化(需要调用new方法)

例如:

QPushButton *okBtn = new QPushButton(QString("OK"),this);

优势:当父组件销毁的时候,子组件也会随之销毁

5.常用的宏

1)Q_OBJECT

        元对象系统必备的宏

2)Q_CLASSINFO(NAME,Value)

        可以指定类的信息的宏(简单来说可以给类加一些信息)

对于整体的元对象系统最主要了解的就是信号与槽

5.总结元对象系统

为每一个QObject类的派生类提供了一个元对象系统

目的:为了更好的兼容C++的语法以及标准,便于GUI开发

条件:

  1. 类一定是QObject类的派生类
  2. 类一定包含Q_OBJECT宏
  3. 元对象编译器(MOC Meta Object Compiler)

只要满足以上两个条件,元对象编译器就会生成moc文件

moc文件中会包含OMetaObject对象

作用:

  1. [1]获取类的属性\数据
    ...
  2. [2]支持信号与槽
  3. [3]对象树

信号与槽:

[1]类中指定信号

        在类中以signals:限定

        信号就是一个函数声明,并且不需要有实现,也不能实现

[2]发送信号

        当应用满足某一个条件,使用关键字emit发送信号

        发送信号相当于是函数调用

[3]槽

        在类中以public slots:限定

        槽函数就是一个普通的函数,可以是成员函数,也可以是全局函数,不光要有声明也要有实现

[4]信号与槽的连接

        QObject类中有一个成员函数就是connect()方法,用于连接信号与槽

[5]connect()

        信号的发送者对象地址

        发送的信号

                SIGNAL(信号)

                &类::信号

        触发信号的接收者(对象指针this)

        所触发的槽函数

                SLOT(槽函数)

                &类::槽函数

                        当槽函数重载的情况

                                类型转换指定函数的参数类型

                                static_cast(槽函数)

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值