gpt4 book ai didi

qt - Qt : what do they do? 中的 SIGNAL 和 SLOT 宏

转载 作者:行者123 更新时间:2023-12-01 07:54:51 26 4
gpt4 key购买 nike

我是 Qt 的初学者并试图理解 SIGNALSLOT宏。当我学习使用 connect绑定(bind)信号和槽的方法,我在Qt的官方引用页面上找到了教程使用:

connect(obj1, SIGNAL(signal(int)), obj2, SLOT(slot()))

但是,这也很有效:
connect(obj1, &Obj1::signal, obj2, &Obj2::slot)

那么宏 SIGNAL 到底是做什么的?和 SLOT做?他们只是在对象所属的类中查找信号并返回它的地址吗?

那为什么大多数程序员使用这些宏而不是使用 &Obj1::signal因为后者看起来更简单,如果信号函数的参数发生变化,您不需要更改代码?

最佳答案

SIGNAL的使用和 SLOT在 Qt 5 之前,宏曾经是建立连接的唯一方法。连接是在运行时建立的,需要在 header 中标记信号和插槽。例如:

Class MyClass : public QObject
{
Q_OBJECT
signals:
void Signal();

slots:
void ASlotFunction();
};

为避免重复,描述了它的工作方式 in the QT 4 documentation .

信号和槽机制是 Qt 提供的 C++ 扩展的一部分,它利用 Meta Object Compiler (moc) .

This解释了为什么信号和插槽使用 moc。

第二种连接方法得到了很大改进,因为指定的函数可以在编译时检查,而不是运行时检查。此外,通过使用函数的地址,您可以引用任何类函数,而不仅仅是那些标记为槽的部分:

documentation was updated for Qt 5 .

此外,还有一篇关于 Qt 4 连接工作的好博文 here和 Qt 5 here .

关于qt - Qt : what do they do? 中的 SIGNAL 和 SLOT 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31589435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com