0

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

我创建了一个组合框,它使用 model.setcolumn(1) 显示正确的文本我现在需要的是让这个组合框“激活”这条记录的相对唯一 ID,这样我就可以创建一个类别关系.

这样做的最佳方法到底是什么?我觉得我已经走到了死胡同,任何帮助将不胜感激。

最好的,克里斯

4

1 回答 1

1

最好的方法是 sub-classing QComboBox。您不能覆盖activated信号,但您可以创建一个自定义信号,该信号也将在发出时使用 IDactivated发出。你可以连接到这个信号并做你的事情。它会是这样的:

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
于 2011-11-04T01:52:22.200 回答