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()シグナルをキャッチし、シグナルパラメーターを使用して指定された関数を実行しています。

信号に2つの機能を接続すれば、両方が実行されると思います。コードが少し読みにくくなるので、おそらくやるべきではありません。

  • 2 つの関数を実行する場合は changed_signal、他の関数を呼び出す関数を作成します。
  • 用途ごとに異なる機能を実行したい場合は、異なるシグナルを起動するだけです。
于 2012-04-14T02:30:53.690 に答える