4

Pythonの「オブジェクト」サブクラス引数またはなしで発行できるpyqtシグナルが必要です。たとえば、私はこれを行うことができます:

valueChanged = pyqtSignal([MyClass], ['QString'])

しかし、これではありません:

valueChanged = pyqtSignal([MyClass], ['None'])
TypeError: C++ type 'None' is not supported as a pyqtSignal() type argument type

またはこれ:

valueChanged = pyqtSignal([MyClass], [])
TypeError: signal valueChanged[MyObject] has 1 argument(s) but 0 provided

また、引用符なしで None と C++ の同等の "NULL" も試しました。しかし、どちらも機能していないようです。これを機能させるにはどうすればよいですか?

4

3 に答える 3

2

2 番目のオプションを指定する必要はありません。既に None 値になっている可能性があるクラス型のポインターを受け入れます。

valueChanged = pyqtSignal(MyClass)

# both will work as is
inst.valueChanged.emit(MyClass())
inst.valueChanged.emit(None)
于 2012-08-21T16:53:18.903 に答える
2

試したことがうまくいかなかった理由はいくつかあります。

まず、 のtype引数はpyqtSignal、Pythontypeオブジェクトまたは C++ オブジェクト (つまり Qt クラス) の名前を指定する文字列のいずれかを受け入れます。

したがって、引数の型として使用するには、 string ではなくNone渡す必要があります。type(None)"None"

2 つ目Noneは、シグニチャーを明示的に選択せずに、シグナルのデフォルトのオーバーロードを使用できるようにする特殊なケースです。

したがって、次のような信号を作成した場合:

valueChanged = QtCore.pyqtSignal([MyClass], [type(None)])

そして、次のような信号を発信しようとしました:

self.valueChanged[type(None)].emit(None)

次のようなエラーが表示されます。

TypeError: Window.valueChanged[MyClass].emit():
argument 1 has unexpected type 'NoneType'

したがって、 を使用valueChanged[type(None)]すると、実際にはデフォルトの署名 ( [MyClass]) が選択され、一致しない引数 を受け取りますNone

于 2012-08-21T17:49:19.267 に答える