[PySide] Segfault using QScxmlStateMachine.submitEvent(QScxmlEvent)
Alex Blasche
alexander.blasche at qt.io
Fri Nov 9 07:53:28 CET 2018
Hi Romain,
please file a bugreport under bugreports.qt.io in the Pyside project. The content for the bug report you already have in your mail. If you happen to have a stack trace, that would be beneficial too.
Alex
________________________________________
From: PySide <pyside-bounces+alexander.blasche=qt.io at qt-project.org> on behalf of Romain LE DISEZ <romain at ledisez.net>
Sent: Thursday, 8 November 2018 9:30:53 PM
To: pyside at qt-project.org
Subject: [PySide] Segfault using QScxmlStateMachine.submitEvent(QScxmlEvent)
Hi all,
I'm very new to Qt as I'm developing my first application with it. I'm trying to use StateChart based on QScxmlStateMachine.
It works fine except in a situation where I get a segfault. If, in the demo code below, you comment the line submitEvent('MY_EVENT') and uncomment the usage of a ScxmlEvent, the event is dispatched then the application segfaults. Output is:
StateMachine::active: True
('MY_EVENT:', (), {})
Segmentation fault: 11
Am I doing something wrong or is it a bug? How can I provide you useful informations in the latter case. I'm running PySide2 (v5.11.2) on macOS (High Sierra) with Python v2.7.15 (coming from brew).
Thx for your help.
demo.scxml:
<?xml version="1.0" encoding="UTF-8"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" binding="early" name="demo.scxml">
<transition type="internal" event="MY_EVENT"/>
<state id="StateMachine"/>
</scxml>
demo.py:
#!/usr/bin/env python
import sys
from PySide2.QtCore import QObject, QCoreApplication, SLOT, Slot
from PySide2.QtScxml import QScxmlStateMachine, QScxmlEvent
class Backend(QObject):
def __init__(self, machine):
super(Backend, self).__init__()
self.machine = machine
self.machine.connectToState('StateMachine', self, SLOT('state_machine_active(bool)'))
self.machine.connectToEvent('MY_EVENT', self, SLOT('my_event()'))
@Slot(bool)
def state_machine_active(self, active):
print('StateMachine::active: %s' % active)
self.machine.submitEvent('MY_EVENT')
#ev = QScxmlEvent()
#ev.setName('MY_EVENT')
#ev.setEventType(QScxmlEvent.ExternalEvent)
#self.machine.submitEvent(ev)
@Slot()
def my_event(self, *args, **kwargs):
print('MY_EVENT:', args, kwargs)
if __name__ == '__main__':
app = QCoreApplication(sys.argv)
machine = QScxmlStateMachine.fromFile('demo.scxml')
b = Backend(machine)
machine.start()
sys.exit(app.exec_())
--
Romain
_______________________________________________
PySide mailing list
PySide at qt-project.org
http://lists.qt-project.org/mailman/listinfo/pyside
More information about the PySide
mailing list