Results 1 to 11 of 11

Thread: Qwidget Animation with Qtimer

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Jun 2014
    Posts
    5
    Thanks
    1
    Qt products
    Qt5
    Platforms
    Unix/X11

    Default Qwidget Animation with Qtimer

    I want to make an animation with two circlewidget in a scene. My purpose is to make the first widget with concentric circle animated for a periode of time and then stop it, after make the second widget animated also for a periode of time .

    but I get blocked how to make such thing here is my code:

    Main.cpp:
    Qt Code:
    1. #include <QApplication>
    2.  
    3. #include <QTimer>
    4. #include<unistd.h>
    5. #include<QGraphicsScene>
    6. #include<QGraphicsProxyWidget>
    7. #include<QGraphicsView>
    8. #include "circlewidget.h"
    9. #include<QTimeLine>
    10.  
    11.  
    12. int main(int argc, char *argv[])
    13. {
    14.  
    15. QApplication app(argc, argv);
    16. CircleWidget * circle= new CircleWidget();
    17. CircleWidget * circl= new CircleWidget();
    18.  
    19.  
    20. QGraphicsProxyWidget *proxy = new QGraphicsProxyWidget();
    21. proxy->setWidget(circle);
    22. proxy->setPos(0,1);
    23.  
    24. scene.addItem(proxy);
    25. QTimer * time=new QTimer();
    26. QTimer * timer=new QTimer();
    27.  
    28. QGraphicsProxyWidget *prox = new QGraphicsProxyWidget();
    29. prox->setWidget(circl);
    30. prox->setPos(200,100);
    31. scene.addItem(prox);
    32.  
    33. /*QTimeLine *timer = new QTimeLine(5000);
    34. timer->setFrameRange(0, 100);*/
    35.  
    36. QGraphicsView view(&scene);
    37.  
    38.  
    39.  
    40. QObject::connect(timer, SIGNAL(timeout()), circl, SLOT(nextAnimationFrame()));
    41. timer->start();
    42. sleep(5);
    43. timer->stop();
    44. QObject::connect(time, SIGNAL(timeout()),circle, SLOT(nextAnimationFrame()));
    45. time->start();
    46. view.show();
    47.  
    48.  
    49.  
    50. return app.exec();
    51.  
    52. }
    To copy to clipboard, switch view to plain text mode 
    circlewidget.cpp:
    Qt Code:
    1. #include <QtGui>
    2.  
    3. #include "circlewidget.h"
    4. #include<unistd.h>
    5. #include <stdlib.h>
    6.  
    7. CircleWidget::CircleWidget(QWidget *parent)
    8. : QWidget(parent)
    9. {
    10.  
    11.  
    12. setBackgroundRole(QPalette::Base);
    13. setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    14.  
    15. }
    16.  
    17.  
    18. QSize CircleWidget::minimumSizeHint() const
    19. {
    20. return QSize(50, 50);
    21. }
    22.  
    23. QSize CircleWidget::sizeHint() const
    24. {
    25. return QSize(180, 180);
    26. }
    27.  
    28. void CircleWidget::nextAnimationFrame()
    29. {
    30.  
    31. update();
    32. ++ frameNo;
    33.  
    34. }
    35.  
    36.  
    37. void CircleWidget::paintEvent(QPaintEvent *)
    38. {
    39. QPainter painter(this);
    40. painter.setRenderHint(QPainter::Antialiasing);
    41. painter.translate(width() / 2, height() / 2);
    42.  
    43. for (int diameter = 0; diameter < 170; diameter += 6) {
    44.  
    45. int delta = abs((frameNo %120) - diameter / 2);
    46. int alpha = 250 - (delta * delta) / 3 - diameter;
    47. if (alpha > 0) {
    48. painter.setPen(QPen(QColor(166, diameter / 2, 32, alpha), 5));
    49.  
    50. painter.drawEllipse(QRectF(-diameter / 2.0, -diameter / 2.0,
    51. diameter, diameter));
    52.  
    53. }
    54.  
    55. }
    56. }
    To copy to clipboard, switch view to plain text mode 
    ciclewidget.h:
    Qt Code:
    1. #ifndef CIRCLEWIDGET_H
    2. #define CIRCLEWIDGET_H
    3.  
    4. #include <QWidget>
    5.  
    6. class CircleWidget : public QWidget
    7. {
    8. Q_OBJECT
    9.  
    10. public:
    11.  
    12. CircleWidget(QWidget *parent = 0);
    13. QSize minimumSizeHint() const;
    14. QSize sizeHint() const;
    15.  
    16. public slots:
    17. void nextAnimationFrame();
    18.  
    19. protected:
    20. void paintEvent(QPaintEvent *event);
    21.  
    22. private:
    23.  
    24. int frameNo;
    25. };
    26.  
    27. #endif
    To copy to clipboard, switch view to plain text mode 
    Last edited by anda_skoa; 17th June 2014 at 09:13. Reason: missing [code] tags

Similar Threads

  1. Replies: 1
    Last Post: 25th October 2012, 19:47
  2. Replies: 15
    Last Post: 4th August 2012, 19:11
  3. Replies: 1
    Last Post: 27th July 2012, 16:33
  4. Replies: 3
    Last Post: 1st April 2010, 23:56
  5. Replies: 1
    Last Post: 2nd May 2006, 21:11

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.