1
12
是的,例如,参见qftp,其中done信号携带一个状态。它不包含实际错误,只包含发生错误的信息。
不。发送者永远不能假定,但是,您的特定应用程序可以依赖于它。例如,要使应用程序工作,需要处理表示文件-new的Qaction,但Qaction对象并不关心。
同样,是的,例如Qaction对象。但是,如果您希望能够重用组件,则必须小心确保实际的类不依赖于它。 |
2
12
信号和插槽非常强大,因为它们可以分离对象。你不能假设一个信号已经连接了一个插槽,就像前面回答的那样。 基于信号/时隙的设计的一个主要缺点是,您可以很容易地对实现的逻辑进行松散跟踪。 ,因为一个对象的一个操作可以触发连接到所发出信号的任何其他对象的其他操作。更容易产生不需要的副作用、递归调用等。 |
3
10
不,不是。信号是火和忘记类型的事情。谁连接到信号,它做什么不应该是发射器的问题。 |
4
5
是的,但我通常会使这种情况依赖。如果错误可能是异步发生的,那么表示错误的信号绝对是正确的。如果错误只在客户端代码调用某个特定函数时发生,那么错误应该出现在该函数的响应中,而不是作为信号。但是,在这两种情况之间有很多情况可以根据具体情况来处理。 此外,信号槽机制可以使跨线程通信更容易(这很可能被视为异步情况),为此我将使用它们(错误或否)。
信号(从哲学上)被设计用来表明发生了什么事情。正如其他人所指出的,假设一个信号将与一个插槽匹配,甚至与 一 其他插槽。
信号可以用来启动行动,但可能不会影响你的思维方式。信号表明 福 已经发生了。如果监视类的代码决定 福 发生这种情况时,应显示一个对话框,然后使用该信号启动该操作。但是,发出信号的类通常不负责确保发生正确的操作,因为它不负责执行该操作。(如果是,那么它应该是同一类的一部分,不需要任何信号。) |
5
3
信号/插槽(也称为事件)是消除对象之间耦合的好方法。 例如,视图不能理解模型是如何工作的,当模型改变时,它们“倾听”模型。模型负责说出它何时改变,什么改变。
事件的问题在于,当您使用客户机需求设计事件时。例如,您不应该有信号
|
DELI · 如何在QML中修改TableView数据? 2 年前 |
joshp · Pysides6列从设置向后跨距 2 年前 |
MingMing · C++在MaCOS 11上显示权限对话框 2 年前 |
K.Mulier · PyQt5:如何将QObject移动到主线程? 6 年前 |