用于按住鼠标按钮的 QT 事件过滤器
QT Event filter for holding mouse button down
我如何修改过滤器以在用户按住而不是仅仅按下时触发?我有一些东西在工作,但它并没有完全包含在过滤器中,而且它变得很乱。我不知道如何在不阻塞 UI 线程
的情况下确定用户是否按住按钮一段时间
def holdable(widget):
class Filter(QObject):
clicked = pyqtSignal()
def eventFilter(self, obj, event):
if obj == widget:
if event.type() == QEvent.MouseButtonPress:
if obj.rect().contains(event.pos()):
self.clicked.emit()
return True
return False
filter = Filter(widget)
widget.installEventFilter(filter)
return filter.clicked
我想起来也没那么难,但就是这样
def holdable(widget):
class Filter(QObject):
clicked = pyqtSignal(QWidget)
def eventFilter(self, obj, event):
if obj == widget:
if event.type() == QEvent.MouseButtonPress:
if obj.rect().contains(event.pos()):
obj.heldDown = datetime.datetime.now()
#return True
elif event.type() == QEvent.MouseButtonRelease:
if obj.rect().contains(event.pos()):
if(obj.heldDown):
diff = datetime.datetime.now() - obj.heldDown
obj.heldDown = None
if(diff.total_seconds() > 1):
self.clicked.emit(obj)
return True
return False
filter = Filter(widget)
widget.installEventFilter(filter)
return filter.clicked
你可以通过这样做将它挂接到一个小部件上:
holdable(widgetinstance).connect(self.holdingCallback)
我如何修改过滤器以在用户按住而不是仅仅按下时触发?我有一些东西在工作,但它并没有完全包含在过滤器中,而且它变得很乱。我不知道如何在不阻塞 UI 线程
的情况下确定用户是否按住按钮一段时间def holdable(widget):
class Filter(QObject):
clicked = pyqtSignal()
def eventFilter(self, obj, event):
if obj == widget:
if event.type() == QEvent.MouseButtonPress:
if obj.rect().contains(event.pos()):
self.clicked.emit()
return True
return False
filter = Filter(widget)
widget.installEventFilter(filter)
return filter.clicked
我想起来也没那么难,但就是这样
def holdable(widget):
class Filter(QObject):
clicked = pyqtSignal(QWidget)
def eventFilter(self, obj, event):
if obj == widget:
if event.type() == QEvent.MouseButtonPress:
if obj.rect().contains(event.pos()):
obj.heldDown = datetime.datetime.now()
#return True
elif event.type() == QEvent.MouseButtonRelease:
if obj.rect().contains(event.pos()):
if(obj.heldDown):
diff = datetime.datetime.now() - obj.heldDown
obj.heldDown = None
if(diff.total_seconds() > 1):
self.clicked.emit(obj)
return True
return False
filter = Filter(widget)
widget.installEventFilter(filter)
return filter.clicked
你可以通过这样做将它挂接到一个小部件上:
holdable(widgetinstance).connect(self.holdingCallback)