码迷,mamicode.com
首页 > 其他好文 > 详细

界面切换之飞入飞出

时间:2015-10-01 20:24:39      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

用QT实现的一个简单动画,比较简单

所以,直接上代码,呵呵。

 

 

  1. //tqt.h  
  2. #ifndef TQT_H_  
  3. #define TQT_H_  
  4.   
  5. #include <QtGui>  
  6. #include <QtCore>  
  7.   
  8. class Widget : public QWidget  
  9. {  
  10.     Q_OBJECT  
  11. private:  
  12.     QFrame *frame[10];  
  13.     QPushButton *prevButton;  
  14.     QPushButton *nextButton;  
  15.     QPropertyAnimation *animation1;  
  16.     QPropertyAnimation *animation2;  
  17.     QSequentialAnimationGroup *animationGroup;  
  18.   
  19.     QSize winSize;  
  20.     int index;  
  21.     bool isChanging;  
  22.   
  23. protected:  
  24.     void resizeEvent(QResizeEvent *event);  
  25.   
  26. public:  
  27.     Widget(QWidget *parent = 0);  
  28.     ~Widget();  
  29.   
  30.     public slots:  
  31.         void clickedPrevButton();  
  32.         void clickedNextButton();  
  33.         void animationFinished();  
  34. };  
  35.   
  36.   
  37. #endif  
  38.   
  39.   
  40.   
  41. //tqt.cpp  
  42. #include "tqt.h"  
  43.   
  44. Widget::Widget(QWidget *parent /* = 0 */)  
  45. : QWidget(parent)  
  46. {  
  47.     setWindowTitle("Widget");  
  48.     resize(400, 300);  
  49.   
  50.     animation1 = new QPropertyAnimation(this);  
  51.     animation2 = new QPropertyAnimation(this);  
  52.     animationGroup = new QSequentialAnimationGroup;  
  53.   
  54.     prevButton = new QPushButton("prev", this);  
  55.     nextButton = new QPushButton("next", this);  
  56.     QHBoxLayout *subLayout = new QHBoxLayout;  
  57.     QVBoxLayout *layout = new QVBoxLayout;  
  58.     subLayout->addStretch();  
  59.     subLayout->addWidget(prevButton);  
  60.     subLayout->addWidget(nextButton);  
  61.     subLayout->addStretch();  
  62.     layout->addStretch();  
  63.     layout->addLayout(subLayout);  
  64.     setLayout(layout);  
  65.   
  66.     winSize = size();  
  67.     index = 0;  
  68.     for(int i=0; i<10; i++)  
  69.     {  
  70.         frame[i] = new QFrame(this);  
  71.         frame[i]->setObjectName("avatar");  
  72.        //0.jpg~9.jpg是当前目录下的10张图片  
  73.         QString str = QString("QFrame#avatar{border-image:url(%1.jpg)}")  
  74.             .arg( QString::number(i) );  
  75.         frame[i]->setStyleSheet(str);  
  76.     }  
  77.     prevButton->setEnabled(false);  
  78.   
  79.     animation1->setStartValue( QPoint(winSize.width()/3, 10) );  
  80.     animation1->setEndValue( QPoint(winSize.width(), 10) );  
  81.     animation1->setDuration(2000);  
  82.     animation1->setPropertyName("pos");  
  83.     animation2->setStartValue( QPoint(-winSize.width()/3, 10) );  
  84.     animation2->setEndValue( QPoint(winSize.width()/3, 10) );  
  85.     animation2->setDuration(2000);  
  86.     animation2->setPropertyName("pos");  
  87.     animationGroup->addAnimation(animation1);  
  88.     animationGroup->addAnimation(animation2);  
  89.       
  90.     index = 0;  
  91.     animation1->setTargetObject(frame[index]);  
  92.     isChanging = false;  
  93.     connect(prevButton, SIGNAL(clicked()), this, SLOT(clickedPrevButton()));  
  94.     connect(nextButton, SIGNAL(clicked()), this, SLOT(clickedNextButton()));  
  95.     connect(animationGroup, SIGNAL(finished()), this, SLOT(animationFinished()));  
  96. }  
  97.   
  98. Widget::~Widget()  
  99. {  
  100.   
  101. }  
  102.   
  103. void Widget::resizeEvent(QResizeEvent *event)  
  104. {  
  105.     winSize = size();  
  106.     for(int i=0; i<10; i++)  
  107.         frame[i]->setGeometry(-winSize.width()/3, 10, winSize.width()/3, winSize.height()-50);  
  108.     frame[index]->setGeometry(winSize.width()/3, 10, winSize.width()/3, winSize.height()-50);  
  109.   
  110.     animation1->setStartValue( QPoint(winSize.width()/3, 10) );  
  111.     animation1->setEndValue( QPoint(winSize.width(), 10) );  
  112.     animation2->setStartValue( QPoint(-winSize.width()/3, 10) );  
  113.     animation2->setEndValue( QPoint(winSize.width()/3, 10) );  
  114.   
  115. }  
  116.   
  117. void Widget::clickedPrevButton()  
  118. {  
  119.     if(isChanging)  
  120.         return;  
  121.     nextButton->setEnabled(true);  
  122.     isChanging = true;  
  123.     setFixedSize(winSize.width(), winSize.height());  
  124.     index--;  
  125.     animation2->setTargetObject(frame[index]);  
  126.     animationGroup->start();  
  127.     if(index <= 0)  
  128.         prevButton->setEnabled(false);  
  129. }  
  130.   
  131.   
  132. void Widget::clickedNextButton()  
  133. {  
  134.     if(isChanging)  
  135.         return;  
  136.     prevButton->setEnabled(true);  
  137.     isChanging = true;  
  138.     setFixedSize(winSize.width(), winSize.height());  
  139.     index++;  
  140.     animation2->setTargetObject(frame[index]);  
  141.     animationGroup->start();  
  142.     if(index >= 9)  
  143.         nextButton->setEnabled(false);  
  144. }  
  145.   
  146. void Widget::animationFinished()  
  147. {  
  148.     isChanging = false;  
  149.     setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);  
  150.     animation1->setTargetObject(frame[index]);  
  151. }  
  152.   
  153.   
  154.   
  155. //main.cpp  
  156. #include "tqt.h"  
  157.   
  158. int main(int argc, char **argv)  
  159. {  
  160.     QApplication app(argc, argv);  
  161.     Widget *widget = new Widget;  
  162.     widget->show();  
  163.     return app.exec();  
  164. }  

本程序有10张图片,按prev, next可前后切换

http://blog.csdn.net/small_qch/article/details/6858611

界面切换之飞入飞出

标签:

原文地址:http://www.cnblogs.com/findumars/p/4851392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!