Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Caduceus от Июль 01, 2010, 15:38



Название: Сделал все как в examples//animatedtiles - не пашет
Отправлено: Caduceus от Июль 01, 2010, 15:38
Полностью перенес тот пример в свою прогу. Абсолютно все совпадает, с точностью до строчки. Никак. Не анимируются. Какие у анимации подводные камни?


Название: Re: Сделал все как в examples//animatedtiles - не пашет
Отправлено: Caduceus от Июль 01, 2010, 15:47
ПОнимаю, что написал для телепатов. Не может ли кто глянуть кодец - что не так?
Прога - это диалог. Вот что в конструкторе диалога
Код:
        ui.setupUi(this);

QPixmap kineticPix("im.png");
QPixmap bgPix("bkg.jpg");

m_ListObjects = new SListScene( this );

QList<SGraphicsItem *> items;
for (int i = 0; i < 64; ++i) {
SGraphicsItem *item = new SGraphicsItem(kineticPix);
item->setOffset(-kineticPix.width()/2, -kineticPix.height()/2+4*i);
item->setZValue(i);
items << item;
m_ListObjects->addItem(item);
}

// States
QState *rootState = new QState;
QState *ellipseState = new QState(rootState);
QState *figure8State = new QState(rootState);
QState *randomState = new QState(rootState);
QState *tiledState = new QState(rootState);
QState *centeredState = new QState(rootState);

// Values
for (int i = 0; i < items.count(); ++i) {
SGraphicsItem *item = items.at(i);
// Ellipse
ellipseState->assignProperty(item, "pos",
QPointF(cos((i / 63.0) * 6.28) * 250,
sin((i / 63.0) * 6.28) * 250));

// Figure 8
figure8State->assignProperty(item, "pos",
QPointF(sin((i / 63.0) * 6.28) * 250,
sin(((i * 2)/63.0) * 6.28) * 250));

// Random
randomState->assignProperty(item, "pos",
QPointF(-250 + qrand() % 500,
-250 + qrand() % 500));

// Tiled
tiledState->assignProperty(item, "pos",
QPointF(((i % 8) - 4) * kineticPix.width() + kineticPix.width() / 2,
((i / 8) - 4) * kineticPix.height() + kineticPix.height() / 2));

// Centered
centeredState->assignProperty(item, "pos", QPointF());
}

// Ui
ui.allView->setScene( m_playersListObjects );
ui.allView->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
ui.allView->setBackgroundBrush(bgPix);
ui.allView->setCacheMode(QGraphicsView::CacheBackground);
ui.allView->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);

QStateMachine states;
states.addState(rootState);
states.setInitialState(rootState);
rootState->setInitialState(randomState);

QParallelAnimationGroup *group = new QParallelAnimationGroup;
for (int i = 0; i < items.count(); ++i) {
QPropertyAnimation *anim = new QPropertyAnimation(items[i], "pos");
anim->setDuration(750 + i * 25);
anim->setEasingCurve(QEasingCurve::InOutBack);
group->addAnimation(anim);
}
QAbstractTransition *trans = rootState->addTransition(ui.pushButton, SIGNAL(pressed()), ellipseState);
trans->addAnimation(group);

trans = rootState->addTransition(ui.PlayerNationality, SIGNAL(currentIndexChanged(int)), figure8State);
trans->addAnimation(group);

QTimer timer;
timer.start(1025);
timer.setSingleShot(true);
trans = rootState->addTransition(&timer, SIGNAL(timeout()), tiledState);
trans->addAnimation(group);
   
states.start();


Все из примера. Элементы встают в начальную позицию и все.. никакой анимации нету ни разу...


Название: Re: Сделал все как в examples//animatedtiles - не пашет
Отправлено: BRE от Июль 01, 2010, 17:52
Нужно выучить C++.

Если этот код расположить в конструкторе, то все объекты созданные на стеке (states, timer) при выходе из конструктора будут разрушены.


Название: Re: Сделал все как в examples//animatedtiles - не пашет
Отправлено: Caduceus от Июль 02, 2010, 09:13
Черт. Это надо ж так ступить...
СПАСИБО