安全的转换方式——qobject_cast

1、qobject_cast用法

函数原型:

T qobject_cast ( QObject * object )

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

在使用时有两个限制:

1、T类型必须继承自QObject

2、在声明时必须有Q_OBJECT宏

应用: 多个对象的 signal 会连接到同一个 slot 时(例如多个Button可能会connect到一个slot函数onClick())。

用法:


QObject * obj = sender(); //返回发出信号的对象,用QObject类型接收

QPushButton *button_tmp = qobject_cast(obj);  //向下转型为按钮类型

if (button_tmp != nullptr)	//是否转型成功
{
	...对此按钮的其他操作
}

2、尽可能少的用强制转换:

qobject_cast 安全在于:当obj不属于QPushButton 的类型或者其子类的时候不能转换

QPushButton *button_tmp = qobject_cast(Obj); 

而强制转换 无论Obj 是什么类型都能转换成功,转换后截断也好,超位也好,都能够成功。这样是非常不安全的!!

QPushButton * button_tmp = (QPushButton *)Obj;

参考博客1
参考博客2

你可能感兴趣的:(QT)