Qt轮播图动画实现

本文介绍了如何在Qt中使用属性动画实现轮播图效果。关键点包括计算图片移动位置、动态调整布局以及管理动画状态。通过示例代码`wheelwidget.h`、`wheelwidget.cpp`和`wheelwidget.ui`,展示了在Qt 5.14.1及VS2019上的实现过程。
摘要由CSDN通过智能技术生成

Qt轮播图动画实现

轮播图在网页上挺常见的,在Qt中可以用属性动画来实现。

需要注意几点

  • 计算好需要移动图片的始末位置
  • 在合适的时候将要显示的图片添加到布局,并将要消失的图片移除布局
  • 动画结束时,把消失的图片删除
  • 当动画还没结束,又有新的动作时,应马上结束动画开始新动作

看代码。
wheelwidget.h

#pragma once
#include "QObject"

#include <QWidget>
#include <QButtonGroup>
#include <QSize>
#include <QDir>
#include <QFileInfo>
#include <QPropertyAnimation>
#include <QTimer>
#include <QDebug>
#include <QThread>
#include <QListWidgetItem>
#include "ui_wheelwidget.h"
#include "QParallelAnimationGroup"
#include <QEasingCurve>

//轮播图类,实现轮播效果
class wheelwidget : public QWidget
{
   
	Q_OBJECT

public:
	wheelwidget(QWidget *parent = Q_NULLPTR);
	~wheelwidget();
public slots:
	void addItem(QFileInfo fileinfo);
	void puticeChanged(int row);

private:
	void startAnimation();
	Ui::wheelwidget ui;
	QButtonGroup* m_pButtonGroup;
	QSize m_iconSize;
	QParallelAnimationGroup* m_pAnimGroup;
	int m_iDuration = 1000; //动画持续时间
	int m_ipreRow = 0;
	QWidget* m_pShouleDel = nullptr;
	QEasingCurve::Type m_eEasingCurve = QEasingCurve::OutBounce;
	QString m_PituceDirPath = u8"H:/秦时明月/";
};


//文件读取类
class readPuticeFile : public QObject
{
   
	Q_OBJECT

public:
	readPuticeFile(QObject* parent = nullptr)
		:QObject(parent)
	{
   

	}
	void setDirPath(QString path) {
    m_DirPath = path; }

signals:
	void sigAddItem(QFileInfo fileinfo);
	void sigOver();

public slots:
	void startRead()
	{
   
		qDebug() << QThread::currentThreadId();
		QDir dir(u8"H:/秦时明月/");
		auto filelist = dir.entryInfoList();
		for (auto& file : filelist)
		{
   
			emit sigAddItem(file);
// 			QThread::msleep(100);
		}
		emit sigOver();
	}
private:
	QString m_DirPath;
};

wheelwidget.cpp

#include "wheelwidget.h"
#include <QIcon>
#include <QMetaObject>
#include <QMetaEnum>

wheelwidget::wheelwidget(QWidget *parent)
	: QWidget(parent),
	m_iconSize
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值