1

在 main.py

def setNumberFormat2(self):
    dialog = numberformatdlg2.NumberFormatDlg(self.format, self)
    self.connect(dialog, SIGNAL("changed"), self.refreshTable)
    dialog.show()

并在form.py

class NumberFormatDlg(QDialog):
  def __init__(self, format, parent=None):
       .....
     self.connect(buttonBox.button(QDialogButtonBox.Apply),
                                  SIGNAL("clicked()"), self.apply)
     self.connect(buttonBox, SIGNAL("rejected()"),
                                  self, SLOT("reject()"))
     self.setWindowTitle("Set Number Format (Modeless)")


  def apply(self):
     ....
     self.emit(SIGNAL("changed"))

据作者说:

最后,我们发出一个 changed 信号,正如我们所见,这会导致调用者的 refreshTable() 方法被调用,这反过来又使用调用者的格式字典格式化表中的所有数字。

当我们发出时,它如何知道我们要应用哪个 SLOT?本质上,如果我们有

self.connect(dialog, SIGNAL("changed"), self.refreshTable)
self.connect(dialog, SIGNAL("changed"), self.anotherMethod)

怎么self.emit(...)知道我们申请的是哪个插槽?还是我错过了一些信息?

谢谢。

4

1 回答 1

3

self.emit什么都不“知道”——它只是发出信号。该self.connect()方法是捕获信号并使用信号参数运行给定的函数。

如果将两个函数连接到一个信号,我认为两者都会运行。您可能不应该这样做,因为它会使您的代码有点不可读。

  • 如果要运行两个函数,请创建一个被调用的函数,该函数 changed_signal将调用其他函数。
  • 如果你想为不同的用途运行不同的功能,只需触发不同的信号。
于 2012-04-14T02:30:53.690 回答