Hello,

I am trying to handle single and double-click events differently in a 
QToolButton.
>From what I have read in forums, Qt does not filter out single click events 
>when a double click occurs, in other words there will always be a 
>mousePressEvent emitted even if it's actually a double-click. The recommended 
>approach in C++ appears to be launching a timer and deferring single click 
>handling.

a) If there is a better approach, please let me know!
b) I tried the implementation below, but in the timerExpired function I get the 
dreaded "Internal C++ object (PySide2.QtGui.QMouseEvent) already deleted" 
error. I guess storing it in a member variable is insufficient?

class QToolButtonTest(QToolButton):
    def __init__(self, parent = None):
        super().__init__(parent)
        self.timer = None

    def cancelTimer(self):
        if self.timer:
            self.timer.stop()
        self.timer = None
        self.mousePressData = None

    def timerExpired(self):
        super().mousePressEvent(self.mousePressData)
        self.cancelTimer()

    def mousePressEvent(self, event):
        if not self.timer:
            self.mousePressData = event
            self.timer = QTimer(self)
            self.timer.timeout.connect(self.timerExpired)
            self.timer.setSingleShot(True)
            self.timer.start(1000)

    def mouseDoubleClickEvent(self, event):
        self.cancelTimer()
        super().mouseDoubleClickEvent(event)


_______________________________________________
PySide mailing list
[email protected]
https://lists.qt-project.org/listinfo/pyside

Reply via email to