qobject_cast

来源:互联网 发布:手机屏幕跑出蜘蛛软件 编辑:程序博客网 时间:2024/06/11 05:34


1、四个概念


向上转型子类转换为父类,使用 dynamic_cast<type_id>(expression) ,这种转换相对来说比较安全不会有数据的丢失;

向下转型父类转换为子类,可以使用强制转换,这种转换时不安全的,会导致数据的丢失,原因是父类的指针或者引用的内存中可能不包含子类的成员的内存。

动态转换dynamic_cast<type_id>(expression),表示的是将 expression 转换为 type_id 类型数据,一般是子类的指针或者引用转换为父类的指针或者引用;

静态转换static_cast<type_id>(expression),表示的是将 expression 转换为 type_id 类型数据,常用用于数值数据类型的转换


2、函数原型及限制


函数原型:

T qobject_cast ( QObject * object )

函数返回 object 向下的转型 T ,如果转型不成功则返回 0 ,如果传入的 object 本身就是 0 则返回 0 。

在使用时有两个限制:

T类型必须继承自 QObject 。

在声明时必须有 Q_OBJECT 宏。


3、使用场景


使用场景

当某一个Object emit 一个 signal的时候,它就是一个 sender , 系统会记录下当前是谁 emit 出这个 signal 的,所以在对应的slot 里就可以通过 sender() 得到当前是谁 invoke 了该 slot 。

有可能多个 Object 的 signal 会连接到同一个 signal (例如多个Button可能会connect到一个slot函数onClick()),

因此这是就 需要判断到底是哪个 Object emit 了这个 signal ,根据sender 的不同来进行不同的处理.


在槽函数中:

QObject* obj = sender(); // 返回发出信号的对象,用QObject类型接收QPushButton*button_tmp = qobject_cast<QPushButton *>(obj);   // 向下转型为按钮类型



原创粉丝点击