从 qComboBox 弹出菜单中捕捉鼠标按钮按下信号 [英] Catch mouse button pressed signal from qComboBox popup menu

查看:56
本文介绍了从 qComboBox 弹出菜单中捕捉鼠标按钮按下信号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做了多选QComboBox.项目是可检查的(每个项目都有复选框和文本值).CheckBox 仅在用户单击时才被选中.我想要的是在用户单击文本值时捕捉信号,以便我可以将旁边的复选框设置为选中状态.如何做到这一点?

I have made multi-select QComboBox. Items are checkable (every item have check box and text value). CheckBox is checked only when user click on it. What I want is to catch signal when user click on text value so I can set check box next to it checked. How to do that?

这是我将模型设置为组合框的方式:

This is how I set model to combo box:

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的文本总是显示为选择"

I've added event filter to block wheel event,so firstItem's text is always shown as "chosen"

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

推荐答案

您需要将处理程序连接到 按下组合的的信号查看:

You need to connect a handler to the pressed signal of the combo's view:

    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)

这篇关于从 qComboBox 弹出菜单中捕捉鼠标按钮按下信号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆