我一直在努力让这个工作,但到目前为止还没有找到正确的路线。我正在使用 pyqt,我正在查询一个 MySql 数据库,从中收集一个包含所有列的模型。到这里为止一切都很好。。
我创建了一个组合框,它使用 model.setcolumn(1) 显示正确的文本我现在需要的是让这个组合框“激活”这条记录的相对唯一 ID,这样我就可以创建一个类别关系.
这样做的最佳方法到底是什么?我觉得我已经走到了死胡同,任何帮助将不胜感激。
最好的,克里斯
最好的方法是 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