Qt信号和插槽:权限

约翰贝克斯

SO上的受尊重答案与实际Qt文档之间存在差异。

我已经阅读了这个问题,希望进一步澄清。任何人都可以确认:

  • 信号始终是protected,因此只能由该类或其任何子类发出。我不确定这是真的,上面的问题显示了支持此声明的答案。但是Qt文档说:Signals are public access functions and can be emitted from anywhere, but we recommend to only emit them from the class that defines the signal and its subclasses.那是什么?
  • 插槽只是功能,因此可以是公共的,私有的或受保护的。显然,如果插槽是公共的,则外部类具有控制您的类是否将其自身的信号之一连接到其自身的插槽之一的能力。但是,SO信息又不同于文档,即说:a signal emitted from an instance of an arbitrary class can cause a private slot to be invoked in an instance of an unrelated class.这意味着private信号/插槽机制不遵守吗?
  • “公共”,“私人”,“受保护”一词与使用signal关键字无关
  • 发出的信号始终可用于所有其他类别,也就是说,任何其他类别都可以始终连接到该信号(无论其是否允许发出该信号)。
  • 尽管所有类都可以查看所有信号,但是您仍然可以使用具有相同名称的信号来创建两个类,因为该connect函数将类名作为信号前缀(即SomeClass::itsSignal
弗兰克·奥斯特菲尔德
  • 信号在Qt4中受保护,但在Qt5中是公共的,因此信息矛盾。
  • 插槽是一种功能,当这样调用插槽时,它们是公用/受保护/专用的,当连接到信号时,元对象系统会忽略它。
  • 由于signals被定义为public:,如与私人引线预先考虑他们

至:

private:
public: //signals:
    void theSignal();

因此,它没有效果。

  • 所有类别都可以连接到任何信号,正确。在这方面,信号是公共API的一部分。
  • 具有相同的信号签名不是问题。上下文由指定为发送者的对象定义。

使用旧式连接:

Apple *apple ... Orange* orange
connect(apple, SIGNAL(changed()), this, SLOT(appleChanged()));
connect(orange, SIGNAL(changed()), this, SLOT(orangeChanged()));

该信号在这里被指定为字符串(其中没有类名),但是由于apple并且每个orange信号只有一个,changed()并且在QObject实例的元对象中进行查找,该对象在每个类(而不是实例)中都存在,所以它们不会发生冲突。 。

具有编译时检查功能的Qt 5版本:

connect(apple, &Apple::changed, this, &MyReceiver::appleChanged);

这里必须指定一个函数,因此根据范围,必须指定一个类名(可能还有名称空间)。由于函数名称不明确,因此C ++无效,因此无法编译,因此这里很安全。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

信号和插槽 qt 关闭插槽

来自分类Dev

Qt插槽和信号语法

来自分类Dev

Qt信号和插槽故障

来自分类Dev

QT5中的信号和插槽

来自分类Dev

Qt:连接文本中的信号和插槽

来自分类Dev

Qt信号和插槽传递数据

来自分类Dev

在QT中清除信号和插槽的命名

来自分类Dev

Qt-2类信号和插槽

来自分类Dev

Qt插槽和信号。获取插槽接收器对象

来自分类Dev

直接调用函数与发出信号(Qt-信号和插槽)

来自分类Dev

Qt插槽和信号未连接:无此信号

来自分类Dev

Qt信号/插槽问题

来自分类Dev

Qt 5.3信号和插槽,简单函数和Lambda表达

来自分类Dev

信号和插槽编辑按钮被禁用(Qt Designer 4.8)

来自分类Dev

如何在Qt中创建动态信号和插槽?

来自分类Dev

使用Qt信号和插槽与直接调用方法

来自分类Dev

第二类内的QT信号和插槽

来自分类Dev

如何更改QT中信号和插槽的时序?

来自分类Dev

Qt信号和插槽-没有匹配的通话功能

来自分类Dev

Qt信号和插槽:如何获取已更改的数据?

来自分类Dev

不同类别的QT信号和插槽

来自分类Dev

Qt 插槽和信号:MainWindow 中没有匹配函数

来自分类Dev

连接信号和插槽不起作用 Qt

来自分类Dev

信号和插槽的工作

来自分类Dev

QT- 信号和插槽 setEnabled(bool) 插槽不起作用

来自分类Dev

如何使用QT Designer和Visual Studio连接Qt信号和插槽

来自分类Dev

Qt信号插槽:发送信号但未调用插槽

来自分类Dev

插槽和信号无限循环

来自分类Dev

带信号和插槽的QScopedPointer