简介: Qt之Q_OBJECT 宏的神奇之旅 前言 只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制。 凡是QObject类(不管是直接子类还是间接子类),都应该在第一行代码写上Q_OBJECT。不管是不是使用信号槽,都应该添加这个宏。 这时候,就必须在头文件派生类的时候,首先像下面那样引入Q_OBJECT宏: class MyMainWindow...
qobject_cast():对于QObject及其子类对象,可以使用qobject_cast()进行动态类型转换. 如果自定义类要支持函数qobject_cast()那么其需要继承自QObject,且在类定义中插入宏Q_OBJECT. QObject* btn=newQPushButton();constQMetaObject* meta= btn->metaObject(); QString str1=QString(meta->className());//"Q...
a2 qobject_cast():是安全转换函数,安全转换小括号()的类型为类型T。转换的类型T必须是继承于QObject的类,否则转换不成功。 a3 sender():当通过信号槽连接槽函数时,用sender()函数可以获取信号发送者对象,即invoke对象,一般在槽函数调用sender()函数获取发送对象,即QObject *object=sender();。然后再通过安全转...
* qobject_p.h,这个文件中的 code 是辅助实现QObject class 的,这里面最重要的东西是定义了一个 QObjectPrivate 类来存储 QOjbect 对象的成员数据。 理解这个 QObjectPrivate class 又是我们理解 QT kernel source code 的基础,这个对象包含了每一个 QT 对象中的数据成员,好了,让我们首先从理解 QObject 的数...
简介:《QT从基础到进阶·三十四》qobject_cast动态强制转换 qobject_cast()对QObject类执行动态强制转换。 qobject_cast()函数的行为类似于标准c++ dynamic_cast(),但执行速度比dynamic_cast 更快,且不需要C++的RTTI 的支持,但qobject_cast 仅适用于QObject 及其派生类。
qobject_cast是Qt中的一个转换函数,主要用于在QObject子类之间进行转换,实现父类指针向子类指针的转换。其语法为: qobject_cast<T>(object); 1. 其中,T表示目标类型,object表示要转换的QObject对象指针。 qobject_cast会在运行时判断object指针是否指向T类型的对象,如果是,则进行转换并返回转换后的对象指针,否则...
那么,QObjectData是个什么鬼?且往下看: 经分析,QObject类的数据成员被封装在QObjectData类中了,为什么要如此封装数据呢? 原因简述:Qt中有一个很重要的设计模式,句柄(方法)—实体(数据)模式,也就是以QObject为基类的类一般都是句柄类,一般会有一个指针指向一个实体类(数据成员类),在实体类中保存全部的数据成员...
例如在QSpinx的ValueChanged(int)信号的槽函数里,可以通过Sender()和qobject_cast获得信号发射者的指针,从而对信号发射者进行操作。QSpinBox *spinBox=qobject_caet<QSpinBox *>(sender()); 自定义信号以及其使用:在自己设计的类里也可以自定义信号,信号就是在类定义里声明的一个函数,无需实现,只需要发射(emit)...
还有一个对应的template<classT>inlineTqobject_cast(constQObject*),由于代码基本完全一样,本文中直接忽略。 先前(比如Qt4.6.3)曾用过returnstatic_cast<T>(((T)0)->staticMetaObject.cast(object));这种写法。 不管怎么样,转型的操作是通过 static_cast 来实现的,而 QMetaObject::cast 只是不过借助 metaobjec...