0

私はこれを機能させるために一生懸命努力してきましたが、今のところ正しいルートを見つけていません。私は pyqt を使用しており、MySql データベースにクエリを実行して、そこからすべての列を含むモデルを収集しています。ここまでは大丈夫..

model.setcolumn(1) を使用して正しいテキストを表示するコンボボックスを作成しました。今必要なのは、このコンボボックスがこのレコードの相対一意 ID を「アクティブ化」して送信することです。これにより、カテゴリ関係を作成できます。 .

これを行うための最良の方法は何ですか?私は行き止まりに到達したと感じています。助けていただければ幸いです。

ベスト、クリス

4

1 に答える 1

1

最善の方法はサブクラス化QComboBoxです。シグナルをオーバーライドすることはできませんが、activatedが発行されるたびに ID とともに発行されるカスタム シグナルを作成することはできますactivated。そして、この信号に接続して、自分の仕事をすることができます。次のようになります。

class MyComboBox(QtGui.QComboBox):
    activatedId = QtCore.pyqtSignal(int) #correct this if your ID is not an int

    def __init__(self, parent=None):
        super(MyComboBox, self).__init__(parent)
        self.activated.connect(self.sendId)

    @QtCore.pyqtSlot(int)
    def sendId(self, index):
        model = self.model()
        uniqueIdColumn = 0 # if ID is elsewhere adjust
        uniqueId = model.data(model.createIndex(index,uniqueIdColumn,0),QtCore.Qt.DisplayRole)
        self.activatedId.emit(uniqueId)

編集 これは、シグナルのない同様のバージョンです。これは、コンボボックスの で呼び出すuniqueIdたびに返されます。sendIdindex

class MyComboBox(QtGui.QComboBox):
    def __init__(self, parent=None):
        super(MyComboBox, self).__init__(parent)

    def sendId(self, index):
        model = self.model()
        uniqueIdColumn = 0 # if ID is elsewhere adjust
        uniqueId = model.data(model.createIndex(index,uniqueIdColumn,0),QtCore.Qt.DisplayRole)
        return uniqueId
于 2011-11-04T01:52:22.200 に答える