Non. La machine d'états (ME par la suite) passe d'un état à l'autre, c'est tout. Pour autant j'utilise dans ce même programme deux autres ME qui ne posent pas de soucis, tout fonctionne comme prévu (et d'ailleurs cela m'économise du temps, du code et me permet de formaliser graphiquement la dynamique système).
Après quelques tests je suis arrivé à la conclusion que les évènements de la ME sont traités en dernier juste avant de rendre la main à l'utilisateur de l'IHM, ou alors c'est la boucle d'évènements qui est traitée après le code.
Ainsi les changements d'états ne sont pas réalisés de suite après un submitEvent(), ce qui pose problème quand on interroge l'état actif de la ME juste après le submitEvent() et avant que l'appli ne redonne la main à l'utilisateur. D'où la solution envisagée, déconseillée par la doc Qt, mais qui fonctionne.
Tu proposes d'arrêter la ME après chaque submitEvent() ? Auquel cas il faudrait la redémarrer avant de faire un nouveau changement d'états ?
J'ai imaginé une autre solution sans savoir si ça pourrait marcher :
au sein de l'application lancer une autre boucle d'évènements ; raccrocher les machines d'états à cette nouvelle boucle d'évènements qui ne serait pas "poluée" par les évènements IHM.Dans l'hypothèse ou le code de la boucle d'évènements n'est exécuté qu'après le code de l'application, cela ne résoudrait rien, sauf si cette nouvelle boucle d'évènement pour la ME est lancée dans un autre thread. Mais là pour moi, c'est encore un territoire inconnu...