Russian Qt Forum
Ноябрь 23, 2024, 20:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: не работает QSignalTransition  (Прочитано 2969 раз)
andrew.k
Гость
« : Февраль 15, 2012, 10:22 »

Не понимаю, что не так делаю.

Вот код создания стейтов.
Код
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. Почему так может быть? Что делаю не так?
« Последнее редактирование: Февраль 15, 2012, 10:24 от andrew.k » Записан
thechicho
Гость
« Ответ #1 : Февраль 15, 2012, 12:39 »

я нифига не понял Веселый
про наследование так и не осилил прочитать, но мне кажется, что раз
bool QSignalTransition::eventTest ( QEvent * event ) [virtual protected]
то и надо делать так:

Код
C++ (Qt)
protected:
 
bool eventTest(QEvent *e)
   {
// Сюда никак не попадаю. Но очень хочу!
       QStateMachine::SignalEvent *se = dynamic_cast<QStateMachine::SignalEvent*>(e);
 
       if (!QSignalTransition::eventTest(e))
           return false;
 
 
       return true;
   }

а может и с паблик прокатит, если слово virtual убрать, я хз Улыбающийся
Записан
thechicho
Гость
« Ответ #2 : Февраль 15, 2012, 12:44 »

http://developer.qt.nokia.com/doc/qt-4.8/qsignaltransition.html

Код
C++ (Qt)
class CheckedTransition : public QSignalTransition
{
public:
    CheckedTransition(QCheckBox *check)
        : QSignalTransition(check, SIGNAL(stateChanged(int))) {}
protected:
    bool eventTest(QEvent *e) {
        if (!QSignalTransition::eventTest(e))
            return false;
        QStateMachine::SignalEvent *se = static_cast<QStateMachine::SignalEvent*>(e);
        return (se->arguments().at(0).toInt() == Qt::Checked);
    }
};
 
...
 
QCheckBox *check = new QCheckBox();
check->setTristate(true);
 
QState *s1 = new QState();
QState *s2 = new QState();
CheckedTransition *t1 = new CheckedTransition(check);
t1->setTargetState(s2);
s1->addTransition(t1);
Записан
mutineer
Гость
« Ответ #3 : Февраль 15, 2012, 12:46 »

виртуал пофиг, а вот разный доступ это скорее всего причина проблемы
Записан
andrew.k
Гость
« Ответ #4 : Февраль 15, 2012, 12:55 »

виртуал пофиг, а вот разный доступ это скорее всего причина проблемы
Два аналогичных класса в тех же условиях работают прекрасно.
Но вообще косячок небольшой.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.399 секунд. Запросов: 20.