MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { // ----------------------------------------------------------------------- ui->setupUi(this); QGraphicsScene *scene = new QGraphicsScene(this); ui->graphicsView->setScene(scene); // ----------------------------------------------------------------------- // kolor pedzla QBrush brush = QBrush(Qt::red); brush.setStyle(Qt::DiagCrossPattern); // tworzymy obiekts QGraphicsRectItem *rect = new QGraphicsRectItem(10, 10, 90, 90); rect->setBrush(brush); // ----------------------------------------------------------------------- // ----------------------------------------------------------------------- // definiujemy czas trwania animacji QTimeLine *timeLine = new QTimeLine(1000); timeLine->setFrameRange(0, 100); // definiujemy animacje QGraphicsItemAnimation *animation = new QGraphicsItemAnimation(); animation->setItem(rect); animation->setTimeLine(timeLine); // animacja int odcinek = 100; for (int i = 0; i < 100; ++i) animation->setPosAt(i / 100.0, QPointF(i, i)); // uruchamiamy scenę i animację scene->addItem(rect); timeLine->start(); }
void tst_QGraphicsItemAnimation::checkReturnedLists() { QGraphicsItemAnimation animation; animation.setPosAt(1.0, QPointF(10, -10)); animation.setPosAt(0.5, QPointF(5, -5)); animation.setRotationAt(0.3, 2.3); animation.setTranslationAt(0.3, 15, 15); animation.setScaleAt(0.3, 2.5, 1.8); animation.setShearAt(0.3, 5, 5); QCOMPARE(animation.posList().at(0), (QPair<qreal, QPointF>(0.5, QPointF(5, -5)))); QCOMPARE(animation.posList().at(1), (QPair<qreal, QPointF>(1.0, QPointF(10, -10)))); QCOMPARE(animation.rotationList().at(0), (QPair<qreal, qreal>(0.3, 2.3))); QCOMPARE(animation.translationList().at(0), (QPair<qreal, QPointF>(0.3, QPointF(15, 15)))); QCOMPARE(animation.scaleList().at(0), (QPair<qreal, QPointF>(0.3, QPointF(2.5, 1.8)))); QCOMPARE(animation.shearList().at(0), (QPair<qreal, QPointF>(0.3, QPointF(5, 5)))); QCOMPARE(animation.posList().size(), 2); QCOMPARE(animation.rotationList().size(), 1); QCOMPARE(animation.translationList().size(), 1); QCOMPARE(animation.scaleList().size(), 1); QCOMPARE(animation.shearList().size(), 1); }
int main(int argv, char *args[]) { QApplication app(argv, args); //! [0] QGraphicsItem *ball = new QGraphicsEllipseItem(0, 0, 20, 20); QTimeLine *timer = new QTimeLine(5000); timer->setFrameRange(0, 100); QGraphicsItemAnimation *animation = new QGraphicsItemAnimation; animation->setItem(ball); animation->setTimeLine(timer); for (int i = 0; i < 200; ++i) animation->setPosAt(i / 200.0, QPointF(i, i)); QGraphicsScene *scene = new QGraphicsScene(); scene->setSceneRect(0, 0, 250, 250); scene->addItem(ball); QGraphicsView *view = new QGraphicsView(scene); view->show(); timer->start(); //! [0] return app.exec(); }
void tst_QGraphicsItemAnimation::linearMove() { QGraphicsItemAnimation animation; for (int i = 0; i <= 10; ++i) { QCOMPARE(animation.posAt(i / 10.0).x(), qreal(0)); QCOMPARE(animation.posAt(i / 10.0).y(), qreal(0)); } animation.setPosAt(1, QPointF(10, -10)); for (int i = 0; i <= 10; ++i) { QCOMPARE(animation.posAt(i / 10.0).x(), qreal(i)); QCOMPARE(animation.posAt(i / 10.0).y(), qreal(-i)); } animation.setPosAt(2, QPointF(10, -10)); QCOMPARE(animation.posAt(11).x(), qreal(10)); }
void tst_QGraphicsItemAnimation::overwriteValueForStep() { QGraphicsItemAnimation animation; for (int i=0; i<3; i++){ animation.setPosAt(0.3, QPointF(3, -3.1)); animation.setRotationAt(0.3, 2.3); animation.setTranslationAt(0.3, 15, 15); animation.setScaleAt(0.3, 2.5, 1.8); animation.setShearAt(0.3, 5, 5); QCOMPARE(animation.posList().size(), 1); QCOMPARE(animation.rotationList().size(), 1); QCOMPARE(animation.translationList().size(), 1); QCOMPARE(animation.scaleList().size(), 1); QCOMPARE(animation.shearList().size(), 1); } }
void MainWindow::slotAddAnimationItem() //在场景中加入一个动画星星 { StartItem *item = new StartItem; QGraphicsItemAnimation *anim = new QGraphicsItemAnimation; anim->setItem(item); QTimeLine *timeLine = new QTimeLine(4000); timeLine->setCurveShape(QTimeLine::SineCurve); timeLine->setLoopCount(0); anim->setTimeLine(timeLine); int y =(qrand()%400)-200; for(int i=0; i<400; i++) { anim->setPosAt(i/400.0,QPointF(i-200,y)); } timeLine->start(); scene->addItem(item); }