2016-04-14 20 views
3

için özel bir veri modeli oluşturma Qt kullanıyorum SCXML state machine. QScxmlStateMachine aracılığıyla yerel Qt SCXML yorumlayıcısını kullanmak istiyorum. Ancak, Qt yalnızca SCXML için Boş, EcmaScript ve C++ veri modellerini destekler. Durum makinem özel bir veri modeline sahip.Qt SCXML

Durum makinemi desteklemek için QScxmlDataModel alt sınıfını kullanmak istiyorum. setup(), hasScxmlProperty(), setScxmlProperty() ve scxmlProperty() işlevlerinin uygulanmasının, veri modelinden değerlerin ayarlanmasını/alınmasını nasıl sağlayabileceğini görebiliyorum.

Ancak, ben o kadar expressions ve diğer modele özgü öğeler-böyle <transition cond="..."> veya <script>...</script> olduğu gibi düzgün benim özel veri modelinde değerlendirilir yenilenir o nasıl görmüyorum.

Yalnızca alma/ayarlama özelliklerinden daha fazlasını yapmayı bilen özel bir veri modeli nasıl yapabilirim? Çeşitli geçersiz kılmak gerekir

+0

Phrogz, Çeşitli [değerlendirmeler] (https://github.com/qtproject/qtscxml/blob/5.7/src/scxml/qscxmldatamodel.h#L79) işlevlerini geçersiz kılmanız gerekir. –

+0

Bu işlevlerin neden açık bir şekilde belgelere dahil edilmediğini merak ediyorum. – Phrogz

+0

Phrogz, tahminimce API son değil. Cevap olarak gönderdim. –

cevap

3

QScxmlDataModel fonksiyonlarını değerlendirmek:

virtual QString evaluateToString(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0; 
virtual bool evaluateToBool(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0; 
virtual QVariant evaluateToVariant(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0; 
virtual void evaluateToVoid(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0; 
virtual void evaluateAssignment(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0; 
virtual void evaluateInitialization(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0; 
virtual bool evaluateForeach(QScxmlExecutableContent::EvaluatorId id, bool *ok, ForeachLoopBody *body) = 0; 

Hepsi belgelere dışında bırakılmıştır, ama onları here görebilirsiniz.

Tahminimce bunun sebebi, Qt SCXML modülünün Technology Preview olarak piyasaya sürülmesidir ve API gelecekte değişebilir.

+0

@Phrogz, teşekkürler :) –