PYQT:qCombobox显示列“名称”但传递列“ID”

时间:2011-11-04 00:24:49

标签: mysql pyqt pyqt4 qcombobox

我一直在努力让这个工作,但到目前为止还没有找到正确的路线。 我正在使用pyqt,我正在查询MySql数据库,从中收集包含所有列的模型。直到这里一切都很好..

我创建了一个使用model.setcolumn(1)显示正确文本的组合框 我现在需要的是这个组合框发送“激活”该记录的相对唯一ID,所以我能够创建一个类别关系。

最好的方法是什么?我觉得我已经到了死胡同,任何帮助都会受到赞赏。

最佳, 克里斯

1 个答案:

答案 0 :(得分:1)

最好的方法是对QComboBox进行细分。您无法覆盖activated信号,但您可以创建一个自定义信号,每当发出activated时,该信号也会以ID发出。你可以连接到这个信号并做你的事情。它将是这样的:

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