【发布时间】:2014-01-17 13:05:59
【问题描述】:
我已经进行了多选QComboBox。项目是可检查的(每个项目都有复选框和文本值)。 CheckBox 仅在用户单击它时才被选中。我想要的是在用户单击文本值时捕获信号,以便我可以在它旁边设置复选框。该怎么做?
这就是我将模型设置为组合框的方式:
areas = ["Area one", "Area two", "Area three", "Area four"]
model = QtGui.QStandardItemModel(5, 1)# 5 rows, 1 col
firstItem = QtGui.QStandardItem("---- Select area(s) ----")
firstItem.setBackground(QtGui.QBrush(QtGui.QColor(200, 200, 200)))
firstItem.setSelectable(False)
model.setItem(0, 0, firstItem)
for i,area in enumerate(areas):
item = QtGui.QStandardItem(area)
item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
item.setData(QtCore.Qt.Unchecked, QtCore.Qt.CheckStateRole)
model.setItem(i+1, 0, item)
self.ui.comboBox.setModel(model)
self.ui.comboBox.installEventFilter(self)
我添加了事件过滤器来阻止车轮事件,所以firstItem的文字总是显示为“选择”
def eventFilter(self,target,event):
if target == self.ui.comboBox:
if(event.type()== QtCore.QEvent.Wheel):
#wheel event is blocked here
return True
return False
【问题讨论】:
-
通过修改 eventFilter 并安装到主应用程序来查看每个触发的事件。与组合框交互时似乎根本没有发送任何事件:/
标签: python pyqt4 signals-slots popupmenu qcombobox