Кража колесных событий из QScrollArea - PullRequest
1 голос
/ 18 июня 2009

Я хочу поместить свой пользовательский виджет в QScrollArea, но в моем пользовательском виджете я переопределил wheelEvent (e), и он никогда не вызывается.

Я в порядке с областью прокрутки, у которой нет функции прокрутки колесика мыши. Мне просто нужны эти wheelEvents для вызова моего обработчика. Я попытался обработать события на уровне главного окна, но получил их только тогда, когда виджет прокрутки был на одном из своих крайних значений и не мог двигаться дальше, в любом случае, все они нужны.

Вот упрощенная версия моего кода:

class custom(QWidget):
    def __init__(self, parent=None):
        super(custom, self).__init__(parent)
        self.parent = parent

    def wheelEvent(self,event):
        print "Custom Widget's wheelEvent Handler"

class mainw(QMainWindow):
    def __init__(self, parent=None):
        super(mainw, self).__init__(parent)
        scroll = QScrollArea()
        self.tw = thread_widget(scroll)
        scroll.setWidget(self.tw)
        self.setCentralWidget(scroll)

    def wheelEvent(self,event):
        print "Main Window's wheelEvent Handler"

Может кто-нибудь объяснить мне, как определяется, какой обработчик событий получает события в этой ситуации?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2013

Вы можете установить eventFilter в свой пользовательский класс

class custom(QWidget):
    def __init__(self, parent=None):
        super(custom, self).__init__(parent)
        self.parent = parent
        self.installEventFilter(self)

    def eventFilter(self, qobject, qevent):
        qtype = qevent.type()
        if qtype == QEvent.Wheel:
            ... wheel event logic
            return True
        # parents event handler for all other events
        return super(custom,self).eventFilter(qobject, qevent)
0 голосов
/ 19 июня 2009

Я понял, что он имеет какое-то отношение к методу installEventFilter в QObject, но я не смог заставить пример работать, поэтому я сказал это чертовски и полностью изменил свой план.

проблема решена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...