Не понимаю, что не так делаю.
Вот код создания стейтов.
C++ (Qt)
void AnimationController::registerCommunityCards(QVector<SCard> &cards, QPointF deckpos, QObject *sender, const char *signal)
QState *state = new QState(communityCardsState), *initial;
{
for(int i = 0; i < 5; ++i)
{
state->assignProperty(cards[i].cardItem, "visible",false);
state->assignProperty(cards[i].cardItem,"pos",deckpos);
}
CommunityCardsTransition *trans = new CommunityCardsTransition(sender, signal);
state->addTransition(trans);
initial = state;
for(int c = 0; c < 5; ++c)
{
state = new QState(communityCardsState);
for(int i = 0; i < 5; ++i)
{
state->assignProperty(cards[i].cardItem, "visible",i <= c);
state->assignProperty(cards[i].cardItem,"pos", i <= c ? cards[i].pos : deckpos);
}
trans = new CommunityCardsTransition(sender, signal);
state->addTransition(trans);
}
communityCardsState->setInitialState(static_cast<QAbstractState *>(communityCardsState->children().at(0)));
}
Привожу код, чтобы не было вопросов, хотя там ничего особенного.
C++ (Qt)
class CommunityCardsTransition : public QSignalTransition
{
public:
CommunityCardsTransition(QObject *sender, const char *signal)
:QSignalTransition(sender,signal) {
}
virtual bool eventTest(QEvent *e)
{
// Сюда никак не попадаю. Но очень хочу!
QStateMachine::SignalEvent *se = dynamic_cast<QStateMachine::SignalEvent*>(e);
if (!QSignalTransition::eventTest(e))
return false;
return true;
}
};
Использование:
C++ (Qt)
animationController_->registerCommunityCards(communityCards_,layoutCfg_->getDealerDeckPos(),this,SIGNAL(communityCards(int)));
emit communityCards(3);
Так вот я никогда не попадаю в eventTest. Почему так может быть? Что делаю не так?