[Development] Semantics of QState when state machine execution is stopped

Kevin Funk kevin.funk at kdab.com
Wed Jul 2 16:11:36 CEST 2014

Hey there,

We are currently making the QStateMachine QML-ready by amending all the QSM-
related classes (derived from QAbstractState, QAbstractTransition) and adding 
Q_PROPERTYs macro where needed. You can see a list of already merged changes 
here [1].

All of this work in qtbase is supposed to help making the QStateMachine API 
QML ready. Maybe you remember the request for the 'QQSM' sandbox area a few 
months ago [2] and the short QtCS session held by Brett and myself.

Now to the problem:
One change introduces a QAbstractState::active property [3], which is 
important for binding QML properties to the activeness of individual states. 
This, however, reveals some issues regarding QSM semantics:

We set active to true in case we enter the state (QAbstractState::onEntered) 
and set it to false when leaving it again (via QAbstractState::onExited). 
Easy. When *stopping* the QSM instance, QAbstractState::onExited is never 
called, though. Hence, the after that, states may still be active, which is 
not what we want.

Now the big question: Is this a bug or is it intended? From my gut feeling I 
think there should be always a matching pair of onEntered/onExited calls. 
Right now, we can end up getting consecutive calls to 
QAbstractState::onEntered (when the QSM is restarted while this state was 

The SCXML spec seems to agree here, if I interpret it correctly. Cf. [4], 
"procedure exitInterpreter()": "The purpose of this procedure is to exit the 
current SCXML process by exiting all active states." I'd consider exiting the 
interpreter equal to stopping a QSM instance.

I presume that changing the semantics here (i.e. triggering 
QAbstractState::onExited when the machine is stopped) isn't appropriate, as it 
may break existing applications, but I'm not exactly sure.

Proposed change in semantics is here:


https://codereview.qt-project.org/#/c/88031/ (merged)
https://codereview.qt-project.org/#/c/88032/ (merged)
https://codereview.qt-project.org/#/c/88594/ (merged)
https://codereview.qt-project.org/#/c/88595/ (merged)
https://codereview.qt-project.org/#/c/88596/ (about QAbstractState::active)

Qt Developer Days 2014 • October 6 - 8 at BCC, Berlin • Save the dates!

Kevin Funk | kevin.funk at kdab.com | Software Engineer
KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
Tel. Germany +49-30-521325470, Sweden (HQ) +46-563-540090
KDAB - Qt Experts - Platform-independent software solutions
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4833 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/development/attachments/20140702/7562ab08/attachment.bin>

More information about the Development mailing list