最近研究了一下图片轮播,主要是用到了QPropertyAnimation这个类,具体代码示例如下:

main.cpp

#include <QApplication>
#include "widget.h" int main(int argc, char *argv[])
{
QApplication a(argc, argv); Widget view;
view.show(); return a.exec();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H #include <QWidget>
#include <QPropertyAnimation> QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE class Widget : public QWidget
{
Q_OBJECT public:
Widget(QWidget *parent = nullptr); ~Widget(); protected:
const QString popImage(); void takeAnimation(); void timerEvent( QTimerEvent *event ); private:
void onAnimation0Finished(); void onAnimation1Finished(); signals:
void TakeAnimation(); private:
QVector<QString> aryImage; QWidget *widget0; QWidget *widget1; QPropertyAnimation *animation0; QPropertyAnimation *animation1; Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include <QPropertyAnimation>
#include "widget.h"
#include "ui_widget.h" Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint); // image
aryImage << "c:/1.jpg"
<< "c:/2.jpg"
<< "c:/3.jpg"; // widget
widget0 = new QWidget( this );
widget0->setFixedSize( 375, 200 ); widget1 = new QWidget( this );
widget1->setFixedSize( 375, 200 ); // animation
animation0 = new QPropertyAnimation();
animation1 = new QPropertyAnimation(); takeAnimation(); startTimer( 5000 );
} Widget::~Widget()
{
delete animation0;
delete animation1;
delete ui;
} const QString Widget::popImage()
{
auto img = aryImage.first();
aryImage.pop_front();
aryImage.push_back( img );
return img;
} void Widget::takeAnimation()
{
if ( animation0->targetObject() == nullptr ) {
widget0->setStyleSheet( QString( "border-image: url(%1);" ).arg( popImage() ) );
animation0->setTargetObject( widget0 );
} else if ( animation0->targetObject() == widget1 ) {
animation0->setTargetObject( widget0 );
} else if ( animation0->targetObject() == widget0 ) {
animation0->setTargetObject( widget1 );
} animation0->setPropertyName( "geometry" );
animation0->setDuration( 1500 );
animation0->setStartValue( QRect( 0, 0, 375, 200 ) );
animation0->setEndValue( QRect( -375, 0, 0, 200 ) );
animation0->start(); if ( animation1->targetObject() == nullptr ) {
widget1->setStyleSheet( QString( "border-image: url(%1);" ).arg( popImage() ) );
animation1->setTargetObject( widget1 );
} else if ( animation1->targetObject() == widget0 ) {
widget1->setStyleSheet( QString( "border-image: url(%1);" ).arg( popImage() ) );
animation1->setTargetObject( widget1 );
} else if ( animation1->targetObject() == widget1 ) {
widget0->setStyleSheet( QString( "border-image: url(%1);" ).arg( popImage() ) );
animation1->setTargetObject( widget0 );
} animation1->setPropertyName( "geometry" );
animation1->setDuration( 1500 );
animation1->setStartValue( QRect( 375, 0, 750, 200 ) );
animation1->setEndValue( QRect( 0, 0, 375, 200 ) );
animation1->start();
} void Widget::timerEvent( QTimerEvent *event )
{
takeAnimation();
}

Qt 图片轮播的更多相关文章

  1. 原生js+css3实现图片自动切换,图片轮播

    运用CSS3transition及opacity属性 制作图片轮播动画 自己这两天根据用js来控制触发CSS3中transition属性,从而写出来的以CSS3动画为基础,js控制过程的图片轮播 运用 ...

  2. 纯javaScript、jQuery实现个性化图片轮播

    纯javaScript实现个性化图片轮播 轮播原理说明<如上图所示>: 1. 画布部分(可视区域)属性说明:overflow:hidden使得超出画布部分隐藏或说不可见.position: ...

  3. jQuery个性化图片轮播效果

    jQuery个性化图片轮播效果 购物产品展示:图片轮播器<效果如下所示> 思路说明: 每隔一段时间,实现图片的自动切换及选项卡选中效果,鼠标划入图片动画停止,划出或离开动画开始 两个区域: ...

  4. 原生JS实现"旋转木马"效果的图片轮播插件

    一.写在最前面 最近都忙一些杂七杂八的事情,复习软考.研读经典...好像都好久没写过博客了... 我自己写过三个图片轮播,一个是简单的原生JS实现的,没有什么动画效果的,一个是结合JQuery实现的, ...

  5. 基于面向对象的图片轮播(js原生代码)

    无论你想走多远,你都需要不断地走下去.前端最精华的便是原生的js,这也是我们前端工程师的技术分层的重要指标,也提现这你的代码能力,开发的水平.废话不多说,进入今天的主要分享————基于面向对象思想的图 ...

  6. jquery 图片轮播demo实现

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 图片轮播demo,弄清楚过程其实是一个很简单的东西,看网上都没有什么实质性的代码,就自己把过程捋了一遍实现了. 这次因为随手写的,所以没有做 ...

  7. PgwSlideshow-基于Jquery的图片轮播插件

    0 PgwSlideshow简介 PgwSlideshow是一款基于Jquery的图片轮播插件,基本布局分为上下结构,上方为大图轮播区域,用户可自定义图片轮播切换的间隔时间,也可以通过单击左右方向按键 ...

  8. 一分钟搞定AlloyTouch图片轮播

      一分钟搞定AlloyTouch图片轮播 轮播图也涉及到触摸和触摸反馈,同时,AlloyTouch可以把惯性运动打开或者关闭,并且设置min和max为运动区域,超出会自动回弹.除了一般的竖向滚动,A ...

  9. 12款经典的白富美型—jquery图片轮播插件—前端开发必备

    图片轮播是网站中的常用功能,用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美 ...

  10. Jsoup开发网站客户端第二篇,图片轮播,ScrollView兼容ListView

    最近一段日子忙的焦头烂额,代码重构,新项目编码,导致jsoup开发网站客户端也没时间继续下去,只能利用晚上时间去研究了.今天实现美食网首页图片轮播效果,网站效果图跟Android客户端实现如图: 从浏 ...

随机推荐

  1. php查询结果汉字乱码解决方法

    问题描述:使用php查询数据显示,显示的结果中所有汉字乱码 问题及解决:这种情况是编码造成的,检查数据库及页面编码是否一致,也可在页面增加: header('Content-Type:text/htm ...

  2. 码云git笔记

    以后要日常使用这个东西,所以今天又学习了下,具体链接如下: 码云帮助中心https://gitee.com/help/articles/4122 先记录一点简单的入门东西: Git 全局设置: git ...

  3. 吐血整理!2025 最好用 AI 工具全汇总,别再瞎找了!

    在当下这个 AI 蓬勃发展的时代,各类 AI 工具如雨后春笋般涌现,让人眼花缭乱.无论是职场人士想要提升工作效率,还是创作者渴望激发灵感.优化内容,亦或是学生期望找到学习的得力助手,都在苦苦寻觅真正好 ...

  4. websocket 后台新订单通知 —— Laravel 5.8 workman PHPSocket.IO教程

    websocket 后台新订单通知 -- Laravel 5.8 Laravel-echo-server教程 PHPSocket.IO,PHP跨平台实时通讯框架 PHPSocket.IO是PHP版本的 ...

  5. AntennaMagus中文培训教程

    AntennaMagus中文培训教程 链接:https://pan.baidu.com/s/1Svc613HvfUtIMB3uOXILkg 提取码:0s2c

  6. 大型通用电子制造执行系统(MES)

    ​ 简介: 系统参考西门子MOM智能制造Opcenter工业软件制造执行系统Camstar电子套件人机料法环数据建模业务对象和车间生产执行事务逻辑,采用面向对象分层设计与C#编程开发:包含电子制造企业 ...

  7. CoreOS 手动升级篇

    说到升级...通常肯定会以下2个步骤: 检查是否有新版本. 下载和安装新版本. 在 CoreOS 中也一样,我们先来看下在 CoreOS 中对应的命令: # 检查是否有新版本 update_engin ...

  8. 阿里巴巴暑期实习 Java 面经,灵犀互娱一面

    哈希表熟悉吗,可以如何实现? 开散列版本什么时候需要扩容 高并发服务器内的主从reactor模型是如何实现的? 进程 线程 协程 的区别? 如何保证线程安全 ? 了解读写锁吗? 单例模式有了解吗? 可 ...

  9. Electron 开发:获取当前客户端 IP

    Electron 开发:获取当前客户端 IP 一.背景与需求 1. 项目背景 客户端会自启动一个服务,Web/后端服务通过 IP + port 请求以操作客户端接口 2. 初始方案与问题 2.1. 初 ...

  10. Redis 分布式锁的正确实现原理演化历程与 Redission的源码

    当线程A,加锁并设置过期时间-->执行业务-->判断锁id完成后,但这时CPU线程调度其它工作了在这里卡住了, 而且也到了锁的过期时间了被动被删除,当线程B,加锁并设置过期时间--> ...