当使用的信号,并插槽时不要
-
22-09-2019 - |
题
我们正在使用的建提供的信号,并插槽我觉 真的 方便。然而,有很大的权力意味着巨大的责任,我认为这是非常容易滥用这一特征。
是否有任何最佳做法的信槽的使用情况?我有一个很难找到一些一般性的准则以这种方式。一些问题(我有清晰的意见,但并不是所有我的团队成员同意):
- 它是确定要使用信号报告的错误?
- 那是正确的假设,一个信号将处理?
- 可能信号被用来发起的行动?E.g。
signal displayInfoScreen()
必须处理的一个槽中显示的信息屏幕。
任何其他意见的时候信号应当/应该不会用的 非常 欢迎!
解决方案
它是确定要使用信号报告
错误?
是的,例如,见QFtp,那里的做携带的信号的状态。它不进行实际错误,仅仅是信息的错误发生。
那是正确的假设,一个信号 可以处理?
没有。发送者不能假定,然而,你的特别的应用程序可以依靠它。例如,QAction代表文件的新需要处理应用程序的工作,但QAction对象也不在乎。
可能信号被用来发起 行动?E.g。信号 displayInfoScreen()必须处理的 一个老虎,显示了一个信息屏幕。
再次,是的,例如QAction对象。但如果你想要能够重复使用的组件时,必须小心,以确保实际的类不取决于它。
其他提示
信号和槽是强大的,因为分离的对象。你不能假设一个信号有时隙连接,如先前的答复。
一个主要缺点的信号/槽设计基础是,可以非常容易疏松轨道的逻辑,你实现, ,由于一个行动的对象可以触发的其他行动的任何其他目的,连接到一个信号发射。这是很容易的有害副作用,递归的电话,等等。
那是正确的假设,一个信号将处理?
没有不是这样的。信号火和忘记种类型的东西。谁会连接到一个信号,它不会不应该发射的关切。
它是确定要使用信号报告的错误?
是的,但我一般会使这种情况的依赖性。如果错误,可能会出现异步,然后一个信号,以表示这绝对是正确的。如果错误时,才会出现客户代码的电话某一功能,则这个错误应该在回应这一职能,而不是作为一个信号。然而,有一系列广泛的情况之间可能完成的情况为基础。
此外,信号老虎机制可以使跨线沟通更容易(而可能被认为是异步的情况),并且我将使用它们为这一目的(错误或否)。
那是正确的假设,一个信号将处理?
信号(哲学)旨在表明,事情已经发生了。正如其他人已经指出,它从来就不是一个好主意,要假定一个信号将与槽,或甚至只是 一个 其他隙。
可能信号被用来发起的行动?E.g。信号displayInfoScreen()必须由一个槽中显示的信息屏幕。
信号可用于发起的行动,但可能不会在你的方式思维。信号的指示 foo 事情发生了。如果代码监视你的类决定时 foo 发生,对话应该显示出来,然后信号被用来发起这一行动。然而,它一般不负责的类的发射信号,以确保适当的行动发生的,因为它不负责这样做的行动。(如果它是,那么它应该属于同一类,并没有信号将是必要的。)
信号/隙(也称为活动)是一个很好的方式来删除之间的联接的对象。
例如,不具有的意见,了解如何将模型的工作,并且当模式的转变,他们"听"的模式。该模型是负责任的说当这变化,什么样的变化。
问题的事件是当你设计的活动与客户的要求。例如,你不应该有一个信号 displayInfoScreen
因为它假定一些有关目的使用这种信号。相反,它应该是 infoChanged
和 InfoScreenDisplayer
听到这个信号显示在屏幕上。如果你需要,可以添加后一个 InfoTweeterPoster
该职位的信息,高音喇叭,只要他们改变。