10

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

那么基本上我怎样才能禁用 QComboBox 的鼠标滚动?

4

3 回答 3

10

当我发现这个问题时,当我试图找出(基本上)相同问题的解决方案时:在我的情况下,我想在 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 在Ralph Tandetzky 指出的链接中的答案,但这次是在 python 中。

于 2017-04-18T08:33:17.290 回答
5

QSpinBox在 a or中也会发生同样的情况QDoubleSpinBox。在QScrollArea 内的 QSpinBox 上:如何防止 Spin Box 在滚动时窃取焦点?您可以通过代码片段找到一个非常好的且解释清楚的解决方案。

于 2012-08-08T14:16:49.660 回答
3

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

于 2010-07-13T22:38:01.717 回答