QDoubleSpinBox + MousePressEvent

Я пытаюсь реализовать свою собственную версию QDoubleSpinBox, чтобы он работал как в Maya с int/FloatFields, поэтому вы можете Ctrl+ щелчок + перетаскивание, чтобы изменить значение.

Я имею эту систему, работающую на QLabel, устанавливая текст из моего значения, но затем, когда я пытаюсь сделать это на QDoubleSpinBox, у меня возникает проблема с mousePressEvent. Работает только на кнопках со стрелками, а не на самом поле...

вот мой начальный код:

class MayaLikeDoubleField(QtGui.QDoubleSpinBox):
    def __init__(self, parent):
        super(MayaLikeDoubleField, self).__init__()

        self.offset = 0

    def mousePressEvent(self, event):
        self.offset = event.x()

    def mouseMoveEvent(self, event):
        modifiers = QtGui.QApplication.keyboardModifiers()
        if modifiers == QtCore.Qt.ControlModifier:
            QtGui.QWidget.mouseMoveEvent(self, event)
            relPos = event.x()-self.offset
            print relPos*0.01
            # instead of printing I would set the value.

В этом случае это не работает. Итак, я попробовал это:

class Widget(QtGui.QWidget):
    def __init__(self):
        super(Widget, self).__init__()
        self.layout = QtGui.QHBoxLayout(self)

        self.sbox = QtGui.QDoubleSpinBox()
        self.layout.addWidget(self.line)
        self.sbox.installEventFilter(self)

    def mousePressEvent(self, event):
        print "Main Widget Mouse Press"
        super(Widget, self).mousePressEvent(event)

    def eventFilter(self, obj, event):
        modifiers = QtGui.QApplication.keyboardModifiers()
        if modifiers == QtCore.Qt.ControlModifier:
            if self.layout.indexOf(obj) != -1:
                if event.type() == event.MouseButtonPress:
                    print "Widget click"
                if event.type() == event.MouseMove:
                    print "Widget Move"
         return super(Widget, self).eventFilter(obj, event)

И сюрприз! это не работает... но если я заменю QDoubleSpinBox на QLineEdit, то это работает... почему? для меня это работает так же, как по умолчанию mousePressButton не работает на нем...

Есть что-то особенное, что мне не хватает?

Спасибо!

0 ответов

Другие вопросы по тегам