我是 Qt 的初学者并试图理解SIGNAL
and SLOT
宏。当我学习使用connect
绑定信号和槽的方法,我发现Qt官方参考页上的教程使用:
connect(obj1, SIGNAL(signal(int)), obj2, SLOT(slot()))
然而,这也非常有效:
connect(obj1, &Obj1::signal, obj2, &Obj2::slot)
那么宏到底是做什么的SIGNAL
and SLOT
做?他们只是在对象所属的类中查找信号并返回它的地址吗?
那么为什么大多数程序员使用这些宏而不是使用&Obj1::signal
因为后者看起来更简单,并且如果信号函数的参数发生变化,您不需要更改代码?
使用SIGNAL
and SLOT
在 Qt 5 之前,宏曾经是建立连接的唯一方法。连接是在运行时建立的,需要在标头中标记信号和槽。例如:
Class MyClass : public QObject
{
Q_OBJECT
signals:
void Signal();
slots:
void ASlotFunction();
};
为了避免重复,描述了它的工作方式在 QT 4 文档中.
信号和槽机制是 Qt 提供的 C++ 扩展的一部分,并利用元对象编译器 (moc).
This解释了为什么信号和槽使用 moc。
第二种连接方法得到了很大的改进,因为可以在编译时而不是运行时检查指定的函数。此外,通过使用函数的地址,您可以引用任何类函数,而不仅仅是标记部分中的函数slots:
The 更新了 Qt 5 的文档.
此外,还有一篇关于 Qt 4 连接工作原理的好博客文章here和 Qt 5here.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)