/*
*/
this
state_
state_
if () {
}
} else {
} else if () {
QDebug((QtMsgType)0) << "" << ;
set_();
= ();
postInternalEvent(
_eventSenders[""] = new SCC_EventSender(this,0
,
new QSignalEvent(this,metaObject()->indexOfSignal(QMetaObject::normalizedSignature("event_()")),QVariantList() QVariant(
get_()
)
));
es = _eventSenders["]]>"];
if (es)
es->cancel();
}
#ifndef __SMCLASS__H
#define __SMCLASS__H
#include "QStateMachine"
#include "QSignalTransition"
#include "QTimer"
#include "QMetaMethod"
#include "QPointer"
#include "QVariant"
#include "QFinalState"
#include "QHistoryState"
#include "QHash"
#include "QSignalEvent"
#include "QEventTransition"
#include "QDebug"
#include "QPropertyAnimation"
#define In(state) (configuration().contains(state_##state))
class SMClass_;
class SCC_UnconditionalTransition : public QAbstractTransition
{
public:
SCC_UnconditionalTransition(QState* s)
: QAbstractTransition(s) {}
protected:
void onTransition(QEvent *) {}
bool eventTest(QEvent *) { return true; }
};
I \
? QGenericArgument(((QSignalEvent*)event)->arguments()[I].typeName(),((QSignalEvent*)event)->arguments()[I].data()) \
: QGenericArgument())
class SCC_EventSender : public QTimer
{
Q_OBJECT
private:
QStateMachine* machine;
QSignalEvent* event;
public:
SCC_EventSender(QStateMachine* m=NULL, int delay=0, QSignalEvent* e=NULL) : QTimer(m), machine(m), event(e)
{
setInterval(delay);
setSingleShot(true);
connect(this,SIGNAL(timeout()),this,SLOT(send()));
start();
}
public Q_SLOTS:
void cancel() { stop(); deleteLater(); }
void send() {
QVariantList args = event->arguments();
int acount = args.count();
event->sender()->metaObject()->method(event->signalIndex()).invoke(event->sender(),
ARG_FROM_VAR(0),ARG_FROM_VAR(1),ARG_FROM_VAR(2),ARG_FROM_VAR(3),ARG_FROM_VAR(4),
ARG_FROM_VAR(5),ARG_FROM_VAR(6),ARG_FROM_VAR(7),ARG_FROM_VAR(8),ARG_FROM_VAR(9));
deleteLater();
}
};
]]>
namespace {
class Transition_ : public QSignalTransition
{
SMClass_* stateMachine;
public:
Transition_(QState* parent)
: QSignalTransition(parent->machine(),SIGNAL(destroyed())SIGNAL(event_),parent)
,stateMachine((SMClass_*)parent->machine())
{
}
protected:
bool eventTest(QEvent* e);
};
};
class SMClass_ : public QStateMachine
{
Q_OBJECT
Q_PROPERTY( READ get_ WRITE set_ NOTIFY _changed)
Q_PROPERTY(QPropertyAnimation* READ anim_ WRITE setAnim_)
public:
SMClass_(QObject* o = NULL)
: QStateMachine(o)
{
_data. = ;
}
QState* ;
QFinalState* ;
QHistoryState* ;
inline bool testCondition_()
{
return true;
}
get_() const
{
return _data.;
}
;
} _data;
struct {
QString name;
QVariantList data;
} _event;
QString _name;
public Q_SLOTS:
void set_( const & value)
{
_data. = value;
emit _changed(value);
}
private Q_SLOTS:
#ifndef QT_NO_PROPERTIES
void assignProperties()
{
->assignProperty(,"",QVariant());
#endif
}
void exec_()
{
}
Q_SIGNALS:
void event_();
void _changed( const &);
type() == QEvent::None) {
switch (event->type()) {
case QEvent::Signal: {
QSignalEvent* e = (QSignalEvent*)event;
_event.data = e->arguments();
_event.name = e->sender()->metaObject()->method(e->signalIndex()).signature();
if (e->sender() == this)
_event.name = _event.name.mid(6);
} break;
default:
break;
}
} else {
_event.name = "";
_event.data.clear();
}
]]>
assignProperties();
}
private:
>]]> _eventSenders;
protected:
public:
void setupStateMachine()
{
_name = "";
setObjectName(_name);
= new
QFinalState
QHistoryState
QState
();
->setObjectName("");
->setInitialState();
->setChildMode(ParallelStates);
->setHistoryType(QHistoryState::
Deep
Shallow
History);
QAbstractTransition* transition;
transition = new
Transition_(
QEventTransition(,
QSignalTransition(state_,SIGNAL(finished()),
QSignalTransition(this,SIGNAL(event_()),
SCC_UnconditionalTransition();
connect(transition,SIGNAL(triggered()),this,SLOT(exec_()));
transition->addAnimation();
transition->setTargetState(state_);
(*transition).setTargetStates(QList<QAbstractState*>() << state_);
->setDefaultState(state_);
connect(, SIGNAL(
entered
exited
()),this,SLOT(exec_()));
}
};
bool Transition_::eventTest(QEvent* e)
{
return QSignalTransition::eventTest(e)
(*e).type() != QEvent::None&& stateMachine->testCondition_();
}
#endif