界面切换之飞入飞出

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

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

[cpp] view plaincopyprint?

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

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

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

时间: 2024-08-25 19:17:16

界面切换之飞入飞出的相关文章

CSS3实现Tooltip提示框飞入飞出动画

我们见过很多利用背景图片制作的Tooltip提示框,但是缺点是扩展比较麻烦,要经常改动图片.还有就是利用多层CSS的叠加实现,但是效果比较生硬,外观不怎么好看.今天我来分享一下利用CSS3快速实现既美观又实用的Tooltip提示框,提示框伴有飞入飞出的动画效果.先来看看效果图. 看上去还简单吧,其实实现的思路的确很简单. 具体效果我们可以在这里查看在线演示. 接下来我们来简单分析一下这个Tooltip实现的CSS3代码. 首先是HTML代码,主要是构造了3个小图标菜单以及对应的Tooltip提示

关键词随机飞入飞出效果

今天又有人问了,吧啦吧啦在网盘里找到了备份 整理一下 其实当时我也是网上找的,不过年代久远出处不详了,抱歉 图图图: http://blog.csdn.net/onlyonecoder/article/details/8518148 布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/ap

android自定义控件之飞入飞出控件

最近呢,本人辞职了,在找工作期间,不幸碰到了这个求职淡季,另外还是大学生毕业求职的高峰期,简历发了无数份却都石沉大海,宝宝心里那是一个苦啊!翻着过去的代码,本人偶然找到了一个有意思的控件,那时本人还没有写博客的习惯,现在补上,先看效果图: 然后看用法代码: StellarMap stellarMap = (StellarMap) findViewById(R.id.stellar); // 设置数据 RecommendAdapter adapter = new RecommendAdapter(

文字飞入和飞出

转载请注明出处:http://blog.csdn.net/forwardyzk/article/details/42493641 我们看到在一个界面上,文字可以从里向外飞出,也可以从外向里飞入,下面我们就研究一下这个效果. 思路: 1.设置要最新要展示的文字. 2.设置View的动画 (1)设置当前的View消失 如果是飞入,设置当前的View动画 渐变动画:由不透明变成透明 伸缩动画:缩小 平移动画:向里平移 如果是飞出 渐变动画:由不透明变成透明 伸缩动画:由放大 平移动画:向外平移 (2

FragmentCustomAnimation实现Fragment的界面切换

1.知识点:FragmentCustomAnimation 2.演示样例:来自于官网演示样例的简化,这样更方便于学习该知识点. 本演示样例的源代码下载地址为:http://download.csdn.net/detail/far_sight/7932287 3.项目FragmentCustomAnimationTest1效果:反复点buttonnew fragment,第点一次,数字加一,实现原因是第点一次加了一个新的Fragment在栈中. 当点返回键时,数字会降低,原因是Fragment在出

界面切换动画

界面切换动画 在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左右滑动的切换效果,首先了解一下Activity切换的实现,从Android2.0开始在Activity增加了一个方法: public void overridePendingTransition (int enterAnim, int exitAnim) 其中: enterAnim 定义Activity进入屏幕时的动画 exitAnim 定义Activity退出屏幕时的动画 overr

RedHat命令行和图形界面切换

1.Linux图形界面和命令介面的切换 在虚拟机里面装了RedHat的Linux系统.默认进入的是图形界面. 从Linux的图形界面切换到命令界面可以按Ctrl+Alt+Fn(n=1,2,3,4,5,6),但是在虚拟机里面Ctrl+Alt已经被占用,即光标切换出虚拟机.所以需要按Ctrl+Shift+Alt+Fn(n=1,2,3,4,5,6). (神马情况?我安装的默认启动的是图形界面,然后按Ctrl+Alt+Fn(2,3,4,5,6)进入命令行,按Ctrl+Alt+F1回到图形界面) 从Lin

iOS 实现简单的界面切换

以下是在iOS中最简单的界面切换示例.使用了多个Controller,并演示Controller之间在切换界面时的代码处理. 实现的应用界面: 首先,创建一个window-based application,即: 使用window-base application的目的是,尽量从最基本的情况下说明程序的编写过程.项目创建好后,即可以编译运行,执行结果是白屏页面: 编写第一个视图和控制器,我管它叫Topic,即主题,因此控制器命名为:TopicController,视图TopicView. 创建T

打开待办前,将NC界面切换到任务中心

1 打开待办前,将NC界面切换到任务中心 2 Object messagecenter = WorkbenchEnvironment.getInstance() 3 .getClientCache(NCMessageMainUI.class.getName()); 4 Object shell = WorkbenchEnvironment.getInstance().getClientCache( 5 MessageCenterShell.class.getName()); 6 if (shel