我正在尝试实现我自己的 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)
和惊喜!它不起作用...但是如果我用 QLineEdit 替换 QDoubleSpinBox 它确实有效...为什么?对我来说,它的工作方式与默认情况下 mousePressButton 不起作用的方式相同......
我有什么特别想念的吗?
谢谢 !