我们正在使用的建提供的信号,并插槽我觉 真的 方便。然而,有很大的权力意味着巨大的责任,我认为这是非常容易滥用这一特征。

是否有任何最佳做法的信槽的使用情况?我有一个很难找到一些一般性的准则以这种方式。一些问题(我有清晰的意见,但并不是所有我的团队成员同意):

  • 它是确定要使用信号报告的错误?
  • 那是正确的假设,一个信号将处理?
  • 可能信号被用来发起的行动?E.g。 signal displayInfoScreen() 必须处理的一个槽中显示的信息屏幕。

任何其他意见的时候信号应当/应该不会用的 非常 欢迎!

有帮助吗?

解决方案

它是确定要使用信号报告
错误?

是的,例如,见QFtp,那里的做携带的信号的状态。它不进行实际错误,仅仅是信息的错误发生。

那是正确的假设,一个信号 可以处理?

没有。发送者不能假定,然而,你的特别的应用程序可以依靠它。例如,QAction代表文件的新需要处理应用程序的工作,但QAction对象也不在乎。

可能信号被用来发起 行动?E.g。信号 displayInfoScreen()必须处理的 一个老虎,显示了一个信息屏幕。

再次,是的,例如QAction对象。但如果你想要能够重复使用的组件时,必须小心,以确保实际的类不取决于它。

其他提示

信号和槽是强大的,因为分离的对象。你不能假设一个信号有时隙连接,如先前的答复。

一个主要缺点的信号/槽设计基础是,可以非常容易疏松轨道的逻辑,你实现, ,由于一个行动的对象可以触发的其他行动的任何其他目的,连接到一个信号发射。这是很容易的有害副作用,递归的电话,等等。

那是正确的假设,一个信号将处理?

没有不是这样的。信号火和忘记种类型的东西。谁会连接到一个信号,它不会不应该发射的关切。

它是确定要使用信号报告的错误?

是的,但我一般会使这种情况的依赖性。如果错误,可能会出现异步,然后一个信号,以表示这绝对是正确的。如果错误时,才会出现客户代码的电话某一功能,则这个错误应该在回应这一职能,而不是作为一个信号。然而,有一系列广泛的情况之间可能完成的情况为基础。

此外,信号老虎机制可以使跨线沟通更容易(而可能被认为是异步的情况),并且我将使用它们为这一目的(错误或否)。

那是正确的假设,一个信号将处理?

信号(哲学)旨在表明,事情已经发生了。正如其他人已经指出,它从来就不是一个好主意,要假定一个信号将与槽,或甚至只是 一个 其他隙。

可能信号被用来发起的行动?E.g。信号displayInfoScreen()必须由一个槽中显示的信息屏幕。

信号可用于发起的行动,但可能不会在你的方式思维。信号的指示 foo 事情发生了。如果代码监视你的类决定时 foo 发生,对话应该显示出来,然后信号被用来发起这一行动。然而,它一般不负责的类的发射信号,以确保适当的行动发生的,因为它不负责这样做的行动。(如果它是,那么它应该属于同一类,并没有信号将是必要的。)

信号/隙(也称为活动)是一个很好的方式来删除之间的联接的对象。

例如,不具有的意见,了解如何将模型的工作,并且当模式的转变,他们"听"的模式。该模型是负责任的说当这变化,什么样的变化。

问题的事件是当你设计的活动与客户的要求。例如,你不应该有一个信号 displayInfoScreen 因为它假定一些有关目的使用这种信号。相反,它应该是 infoChangedInfoScreenDisplayer 听到这个信号显示在屏幕上。如果你需要,可以添加后一个 InfoTweeterPoster 该职位的信息,高音喇叭,只要他们改变。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top