PYQT: qCombobox отображает столбец «Имя», но передает столбец «ID» - PullRequest
0 голосов
/ 04 ноября 2011

Я очень старался, чтобы это сработало, но до сих пор не нашел правильный маршрут.Я использую pyqt и запрашиваю базу данных MySql, собирая из нее модель со всеми столбцами.Пока здесь все хорошо ..

Я создал выпадающий список, который отображает правильный текст с помощью model.setcolumn (1). Теперь мне нужно, чтобы этот выпадающий список отправил "активированный" относительный уникальный идентификатор.этой записи, поэтому я могу создать категорию отношений.

Каков наилучший способ сделать это?Я чувствую, что зашел в тупик, любая помощь будет признательна.

Best, Cris

1 Ответ

1 голос
/ 04 ноября 2011

Лучшим способом будет подкласс QComboBox.Вы не можете переопределить сигнал activated, но вы можете создать собственный сигнал, который также будет передаваться с идентификатором при каждом излучении 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 всякий раз, когда вы звоните sendId с index в выпадающем списке.

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
...