Qt Как отключить прокрутку мышью QComboBox? - PullRequest
6 голосов
/ 14 июля 2010

У меня есть некоторые встроенные QComboBox в QTableView.Чтобы они показывались по умолчанию, я сделал эти индексы «постоянным редактором».Но теперь каждый раз, когда я делаю прокрутку мыши поверх них, они ломают мой текущий выбор таблицы.

Так в принципе, как я могу отключить прокрутку мыши QComboBox?

Ответы [ 3 ]

6 голосов
/ 18 апреля 2017

Когда я нашел этот вопрос, когда я попытался выяснить решение (в основном) той же проблемы: В моем случае я хотел иметь QComboBox в QScrollArea в pyside (библиотека Python QT).

Вот мой переопределенный класс 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 in ссылка Ральф Тандецкий указал , но на этот раз в python.

4 голосов
/ 08 августа 2012

То же самое может случиться с вами в QSpinBox или QDoubleSpinBox. На QSpinBox внутри QScrollArea: Как предотвратить Spin Box от кражи фокуса при прокрутке? вы можете найти действительно хорошее и хорошо объясненное решение проблемы с фрагментами кода.

2 голосов
/ 14 июля 2010

Вы должны иметь возможность отключить прокрутку колеса мыши, установив eventFilter на свой QComboBox и игнорировать события, сгенерированные колесом мыши, или подкласс QComboBox и переопределить wheelEvent , чтобы ничего не делать.

...