Qt如何禁用QComboBox的鼠标滚动?

时间:2010-07-13 21:50:01

标签: qt scroll mouse qcombobox

我在QTableView中有一些嵌入式QComboBox。为了使它们默认显示,我将这些索引设为“持久编辑器”。但是现在每当我在它们上面滚动鼠标时它们会破坏我当前的表选择。

那么基本上如何禁用QComboBox的鼠标滚动?

3 个答案:

答案 0 :(得分:5)

当我发现这个问题时,当我试图找出解决方案(基本上)同样的问题时:在我的情况下,我希望在pyside(python QT lib)的QScrollArea中有一个QComboBox。

这里是我重新定义的QComboBox类:

#this combo box scrolls only if opend before.
#if the mouse is over the combobox and the mousewheel is turned,
# the mousewheel event of the scrollWidget is triggered
class MyQComboBox(QtGui.QComboBox):
    def __init__(self, scrollWidget=None, *args, **kwargs):
        super(MyQComboBox, self).__init__(*args, **kwargs)  
        self.scrollWidget=scrollWidget
        self.setFocusPolicy(QtCore.Qt.StrongFocus)

    def wheelEvent(self, *args, **kwargs):
        if self.hasFocus():
            return QtGui.QComboBox.wheelEvent(self, *args, **kwargs)
        else:
            return self.scrollWidget.wheelEvent(*args, **kwargs)

以这种方式可以调用:

self.scrollArea = QtGui.QScrollArea(self)
self.frmScroll = QtGui.QFrame(self.scrollArea)
cmbOption = MyQComboBox(self.frmScroll)

emkey08's answer中基本上是link Ralph Tandetzky pointed out,但这次是在python中。

答案 1 :(得分:4)

QSpinBoxQDoubleSpinBox也会发生同样的情况。在QSpinBox inside a QScrollArea: How to prevent Spin Box from stealing focus when scrolling?上,您可以找到一个非常好且解释良好的解决方案代码片段的问题。

答案 2 :(得分:2)

您应该可以通过在QComboBox上安装eventFilter来禁用鼠标滚轮滚动,并忽略鼠标滚轮或子类QComboBox生成的事件,并重新定义wheelEvent不执行任何操作。