【问题标题】:Catch mouse button pressed signal from qComboBox popup menu从 qComboBox 弹出菜单中捕获鼠标按钮按下信号
【发布时间】: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


【解决方案1】:

您需要将处理程序连接到组合的viewpressed signal

    self.ui.comboBox.view().pressed.connect(self.handleItemPressed)
    ...

    def handleItemPressed(self, index):
        item = self.ui.comboBox.model().itemFromIndex(index)
        if item.checkState() == QtCore.Qt.Checked:
            item.setCheckState(QtCore.Qt.Unchecked)
        else:
            item.setCheckState(QtCore.Qt.Checked)

【讨论】:

  • 感谢您的回答。这有效(当我单击文本值时:checkBox 已更改)但现在我无法直接选中/取消选中 checkBox。知道为什么吗?
  • @Aleksandar。请改用pressed 信号(我已经更新了我的答案)。
  • 就是这样。我还删除了QtCore.Qt.ItemIsUserCheckable 标志,因此如果用户直接单击复选框,则只有handleItemPressed 会更改复选框的状态。此外,我在handleItemPressed 中添加了if not index.row() == 0: 以禁止用户检查firstItem,现在一切正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2021-05-28
  • 2010-12-22
相关资源
最近更新 更多