Qt 图片轮播
最近研究了一下图片轮播,主要是用到了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 图片轮播的更多相关文章
- 原生js+css3实现图片自动切换,图片轮播
运用CSS3transition及opacity属性 制作图片轮播动画 自己这两天根据用js来控制触发CSS3中transition属性,从而写出来的以CSS3动画为基础,js控制过程的图片轮播 运用 ...
- 纯javaScript、jQuery实现个性化图片轮播
纯javaScript实现个性化图片轮播 轮播原理说明<如上图所示>: 1. 画布部分(可视区域)属性说明:overflow:hidden使得超出画布部分隐藏或说不可见.position: ...
- jQuery个性化图片轮播效果
jQuery个性化图片轮播效果 购物产品展示:图片轮播器<效果如下所示> 思路说明: 每隔一段时间,实现图片的自动切换及选项卡选中效果,鼠标划入图片动画停止,划出或离开动画开始 两个区域: ...
- 原生JS实现"旋转木马"效果的图片轮播插件
一.写在最前面 最近都忙一些杂七杂八的事情,复习软考.研读经典...好像都好久没写过博客了... 我自己写过三个图片轮播,一个是简单的原生JS实现的,没有什么动画效果的,一个是结合JQuery实现的, ...
- 基于面向对象的图片轮播(js原生代码)
无论你想走多远,你都需要不断地走下去.前端最精华的便是原生的js,这也是我们前端工程师的技术分层的重要指标,也提现这你的代码能力,开发的水平.废话不多说,进入今天的主要分享————基于面向对象思想的图 ...
- jquery 图片轮播demo实现
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 图片轮播demo,弄清楚过程其实是一个很简单的东西,看网上都没有什么实质性的代码,就自己把过程捋了一遍实现了. 这次因为随手写的,所以没有做 ...
- PgwSlideshow-基于Jquery的图片轮播插件
0 PgwSlideshow简介 PgwSlideshow是一款基于Jquery的图片轮播插件,基本布局分为上下结构,上方为大图轮播区域,用户可自定义图片轮播切换的间隔时间,也可以通过单击左右方向按键 ...
- 一分钟搞定AlloyTouch图片轮播
一分钟搞定AlloyTouch图片轮播 轮播图也涉及到触摸和触摸反馈,同时,AlloyTouch可以把惯性运动打开或者关闭,并且设置min和max为运动区域,超出会自动回弹.除了一般的竖向滚动,A ...
- 12款经典的白富美型—jquery图片轮播插件—前端开发必备
图片轮播是网站中的常用功能,用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美 ...
- Jsoup开发网站客户端第二篇,图片轮播,ScrollView兼容ListView
最近一段日子忙的焦头烂额,代码重构,新项目编码,导致jsoup开发网站客户端也没时间继续下去,只能利用晚上时间去研究了.今天实现美食网首页图片轮播效果,网站效果图跟Android客户端实现如图: 从浏 ...
随机推荐
- (Python)用栈实现计算器的原理及实现
前言 我们日常使用的计算器是怎么实现计算的呢?能自己判断运算符的优先级去计算,能处理括号的匹配,这些都是怎么实现的呢? 一个大家熟知的答案是用栈,好的,那么为什么要用栈?为什么栈能实现呢? 目录 前言 ...
- FastAPI依赖注入:参数共享与逻辑复用
扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长 第一章:依赖注入核心原理 1.1 依赖树构建机制 from fastapi import Depends def auth_service ...
- Django实战项目-学习任务系统-查询列表分页显示
接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了. 接着优化查询列表分页显示功能,有很多菜单功能都有查询列表显示页面情况,如果数据量多,不分页显示的话,页面展示效果就不太好. 本次 ...
- linux下expdp和impdp命令
一.查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错) >select * from dba_directories; 删除定义目录 > ...
- 为什么不推荐在 MySQL 中直接存储图片、音频、视频等大容量内容?
在MySQL中直接存储图片.音频.视频等大容量内容(通常称为BLOB数据)通常不被推荐,主要原因包括以下几点: 1. 性能问题 存储效率:存储大容量文件(如图片.音频.视频等)会大幅增加数据库的存储负 ...
- cglib 代理类 自己equals自己 返回false
简单的cglib代理示例 普通的 Java 类 package cglib; public class UserService { public void saveUser(String userna ...
- AI提示词:通用 vscode linux c++ 项目CMakeLists和bulid模板
AI提示词 写vscode linux c++20 的CMakeLists.txt文件.build.rebuild文件 这是多项目结构,目录结构如下: projs: │ build.sh 顶层buil ...
- php版10大设计模式,软件工程必须掌握的姿势
作为一个半路出家的php萌新,在看公司老大们的代码时无时无刻不在感叹,老大就是老大,写的代码低耦合.易扩展,我怎么就想不出这写完美的实现方式,最近看了韩大佬的视频后才明白,原来这些都是业界前辈们总结提 ...
- Tailwind CSS一些你需要记住的原子类
前情 Tailwind CSS 是一个原子类 CSS 框架,它将基础的 CSS 全部拆分为原子级别.它的工作原理是扫描所有 HTML 文件.JavaScript 文件以及任何模板中的 CSS 类名,然 ...
- 安装debian12和win11双系统
安装环境:微星主板,AMD CPU 5700G 使用rfues制作分别制作win启动盘(可以在i tell you下载)和debian12(清华源下载较快)启动盘 先安装windows: 主板设置U盘 ...