2

PyQtを使用した信号/スロットの問題で少し問題があります。私のコードは以下のとおりですが、おそらく少し説明する価値があります。最初の2つのQObject.connect()はTrueを返すので、接続が確立されていることがわかります。ただし、comboBoxで選択を変更すると、関数getParametersが期待どおりに呼び出されません。ComboBoxに関連する他の信号をデバッグおよびテストするための以下の5つの接続。それらも期待通りにログを印刷しません。

接続を指定する新しい方法がある他の場所で読んだことから、これが問題になる可能性がありますか?もしそうなら、誰かが私にそのフォーマットの例を教えてもらえますか?ありがとう!

#interactive GUI connections:
    resultCombo = QObject.connect(self.dlg.ui.comboBox, SIGNAL("currentIndexChanged(const QString & text)"), self.getParameters)
    resultSpin = QObject.connect(self.dlg.ui.spinBox_bands, SIGNAL("valueChanged(int i)"), self.getParameters)
    QMessageBox.information( self.iface.mainWindow(),"Info", "connections: ComboBox = %s SpinBox = %s"%(str(resultCombo), str(resultSpin)) )
    QObject.connect(self.dlg.ui.comboBox, SIGNAL("currentIndexChanged(const QString & text)"), self.log1)
    QObject.connect(self.dlg.ui.comboBox, SIGNAL("currentIndexChanged(int index)"), self.log2)
    QObject.connect(self.dlg.ui.comboBox, SIGNAL("currentTextChanged(const QString & text)"), self.log3)
    QObject.connect(self.dlg.ui.comboBox, SIGNAL("highlighted(const QString & text)"), self.log4)
    QObject.connect(self.dlg.ui.comboBox, SIGNAL("activated(const QString & text)"), self.log5)

def log1(self,  input):
    QgsMessageLog.logMessage("currentIndexChanged string. input = " + str(input),  "Debug",  0)
def log2(self,  input):
    QgsMessageLog.logMessage("currentIndexChanged int. input = " + str(input),  "Debug",  0)
def log3(self,  input):
    QgsMessageLog.logMessage("currentTextChanged string. input = " + str(input),  "Debug",  0)
def log4(self,  input):
    QgsMessageLog.logMessage("highlighted string. input = " + str(input),  "Debug",  0)
def log5(self,  input):
    QgsMessageLog.logMessage("cactivated string. input = " + str(input),  "Debug",  0)
4

1 に答える 1

4

私はそれを解決しました。私が推測したように、それは「新しいスタイル」の接続構文と関係がありました。古いスタイルが接続されていた理由は完全にはわかりませんが、接続された関数を呼び出していませんが、現在は次のコードで動作しています。

    self.dlg.ui.comboBox.currentIndexChanged['QString'].connect(self.getParameters)
    self.dlg.ui.spinBox_bands.valueChanged.connect(self.getParameters)

知らない人のために(私は良いドキュメントを見つけられなかったし、見つけることができませんでした-リンク?)、['QString']引数を使用すると、オーバーロードされた信号の結果のタイプを選択できます。送信者を区別するためにタイプを使用しているので、これは私にとって重要でした。しかし、私はもっと明確にして使用する必要があると思います

sender = self.sender()

getParameters関数で、しかしこれは機能しています。

于 2013-02-04T08:46:42.683 に答える