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
[email protected]
http://lists.qt-project.org/mailman/listinfo/pyside

Reply via email to