《QT实用小工具·四十九》QT开发的轮播图

news2024/12/23 16:14:27

1、概述
源码放在文章末尾

该项目实现了界面轮播图的效果,包含如下特点:
左右轮播
鼠标悬浮切换,无需点击
自动定时轮播
自动裁剪和缩放不同尺寸图片
任意添加、插入、删除
单击事件,支持索引和自定义文本
界面美观,圆角、阴影、卡片内偏移、非线性并行动画、渐变切换等
与其他的轮播图不同,在图片切换的同时,每张图片内部还有一丝丝的“漂移”效果。除了带来灵活的视觉效果外,还使得左右缩略图露出的部分可以很好的显示偏向中心的内容。

另外,在两图交替的那一瞬间,采用了很微妙的渐变消失特效,从而不会产生瞬间变换的闪屏感觉,这是其它轮播图都未能做到的。

项目demo演示如下所示:
在这里插入图片描述

项目部分代码如下所示:

#include <QPainter>
#include <QPainterPath>
#include "sidehidelabel.h"

SideHideLabel::SideHideLabel(QWidget *parent) : QLabel(parent)
{
}

SideHideLabel *SideHideLabel::copy(const SideHideLabel *other)
{
    SideHideLabel* label = new SideHideLabel(other->parentWidget());
    label->setGeometry(other->geometry());
    label->sideOffset = other->sideOffset;
    label->startX = other->startX;
    label->radius = other->radius;
    label->pixmap = other->pixmap;
    return label;
}

void SideHideLabel::setPixmap(const QPixmap &pixmap, double sideMaxOffset)
{
//    QLabel::setPixmap(pixmap);
    this->pixmap = pixmap;
    this->startX = -sideMaxOffset; // 单边的长度
}

double SideHideLabel::getMaxOffset() const
{
    return -startX;
}

void SideHideLabel::paintEvent(QPaintEvent *e)
{
//    QLabel::paintEvent(e);
//    return ;

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setRenderHint(QPainter::SmoothPixmapTransform);
    QPainterPath path;
    path.addRoundedRect(rect(), radius, radius);
    painter.setClipPath(path);

    QPixmap newPixmap = pixmap.scaledToHeight(this->height(), Qt::FastTransformation);

    painter.drawPixmap(int(startX + sideOffset), 0,
                       newPixmap.width(), newPixmap.height(),
                       newPixmap);
}

void SideHideLabel::setSideOffset(double of)
{
    this->sideOffset = of;
    update();
}

double SideHideLabel::getSideOffset() const
{
    return sideOffset;
}


源码下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1636808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

遥感雷达波段的原理及应用

雷达波段是不同波长的组。每一种都有其独特的穿透地球表面的能力。它们还可以揭示环境的不同方面。 雷达频段在电磁频谱内具有特定的频率范围。这些波段由 L-、S-、C- 和 X-波段等字母表示。稍后会详细介绍这一点。 什么是合成孔径雷达&#xff1f; 合成孔径雷达 (SAR) 是一…

C语言实验-循环结构和选择结构

一&#xff1a; 求和:1(14)(149)(14916)…(14916…n2)? 其中n的值由键盘输入&#xff1b; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int main() {int sum 0;int n 0;printf("请输入一个整数");scanf("%d", &n);for (int i 0; i &l…

MATLAB 字符串

MATLAB 字符串 在MATLAB中创建字符串非常简单。实际上&#xff0c;我们已经使用了很多次。例如&#xff0c;您在命令提示符下键入以下内容- 示例 my_string ‘(cainiaojc.com)’ MATLAB将执行上述语句并返回以下结果 my_string (cainiaojc.com) MATLAB将所有变量视为数组&a…

Python基础学习之记录中间文件

倘若想记录代码运行过程中的结果文件&#xff0c;那么以下函数仅供参考 代码示例&#xff1a; import os import datetime import sys import pandas as pd# 定义总的文件夹路径 base_folder E:\\D\\log\\product_data_compare_log# 定义一个函数来创建带时间戳的文件夹 def…

特征提取(Feature Extraction)常见统计特征笔记(三)

统计特征是描述数据集中值的一组量&#xff0c;通常用于了解数据的分布、集中趋势和变异程度。常见的统计特征包括均值、中位数、众数、标准差、方差等。下面会详细解释每个统计特征&#xff0c;并给出相应的Python代码。 1、均值&#xff08;Mean&#xff09;&#xff1a;所有…

【团体程序设计天梯赛】往年关键真题 L2-036 网红点打卡攻略 模拟 L2-037 包装机 栈和队列 详细分析完整AC代码

【团体程序设计天梯赛 往年关键真题 详细分析&完整AC代码】搞懂了赛场上拿下就稳 【团体程序设计天梯赛 往年关键真题 25分题合集 详细分析&完整AC代码】&#xff08;L2-001 - L2-024&#xff09;搞懂了赛场上拿下就稳了 【团体程序设计天梯赛 往年关键真题 25分题合…

【webrtc】MessageHandler 4: 基于线程的消息处理:以Fake 收发包模拟为例

G:\CDN\rtcCli\m98\src\media\base\fake_network_interface.h// Fake NetworkInterface that sends/receives RTP/RTCP packets.虚假的网络接口,用于模拟发送包、接收包单纯仅是处理一个ST_RTP包 消息的id就是ST_RTP 类型,– 然后给到目的地:mediachannel处理: 最后消息消…

沟通是SAP项目成功的关键

我在前面的文章中提到SAP项目并不是传统意义上的IT项目&#xff0c;因为SAP项目实施的不仅仅是一个简单的ERP系统&#xff0c;除了系统之外还有流程再造、组织结构变更、用户培训等。在实施过程中有很多部门都要参与进来讨论和做决定&#xff0c;有很多问题和冲突需要解决。从关…

LangChain入门2 RAG详解

RAG概述 一个典型的RAG应用程序,它有两个主要组件&#xff1a; 索引&#xff1a;从源中获取数据并对其进行索引的管道。这通常在脱机情况下发生。检索和生成&#xff1a;在运行时接受用户查询&#xff0c;并从索引中检索相关数据&#xff0c;然后将其传递给模型。 从原始数据…

透明加密的解释及意义,透明加密软件有哪些?

一、什么是透明加密及意义 透明数据加密&#xff08;Transparent Data Encryption (简称TDE)&#xff09;是指可以在文件层对数据和文件进行实时加密和解密&#xff0c;落盘的文件是加密后的内容&#xff0c;而对于上层应用系统和开发人员而言&#xff0c;加解密过程是无感知的…

Python_GUI框架 PyQt 与 Pyside6的介绍

Python_GUI框架 PyQt 与 Pyside6的介绍 一、简介 在Python的GUI&#xff08;图形用户界面&#xff09;开发领域&#xff0c;PyQt和PySide6是两个非常重要的工具包。它们都基于Qt库&#xff0c;为Python开发者提供了丰富的GUI组件和强大的功能。当然Python也有一些其他的GUI工…

Python 绘图边缘留白问题解决方案 / plt.savefig / plt.subplots_adjust 函数简析

文章目录 Part.I IntroductionPart.II 解决方案Chap.I plt.savefigChap.II plt.subplots_adjustChap.III plt.margins Part.III 探索历程Chap.I 默认保存方式Chap.II 使用 bbox_inches 参数控制Chap.III 自定义留白 Reference Part.I Introduction Python 绘图默认保存&#x…

【DeepL】菜鸟教程:如何申请DeepL免费API并使用Python的DeepL

前言 在这篇技术博文中,我们将介绍如何利用DeepL的强大功能,通过其免费API在Python项目中实现高质量的文本翻译。我们将从基础开始,解释DeepL是什么,它的用途,如何申请免费API,以及如何在Python中使用DeepL库。 什么是DeepL? DeepL是一个基于人工智能的翻译服务,它以…

开通Jetbrains个人账号,赠送这些付费插件

开通Jetbrains个人账号&#xff0c;或者Jetbrains现成账号的, 可赠送以下付费插件 现成账号&#xff1a;https://web.52shizhan.cn/activity/xqt8ly 个人账号&#xff1a;https://web.52shizhan.cn/legal 账号支持全家桶系列&#xff1a;AppCode,CLion,DataGrip,GoLand,Intell…

3.9设计模式——Strategy 策略模式(行为型)

意图 定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使他们可以相互替换此模式使得算法可以独立于使用它们的客户而变化 结构 Strategy&#xff08;策略&#xff09;定义所有支持的算法的公共入口。Context使用这个接口来调用某ConcreteStrategy定义的方…

C++编译器的程序转化

编译器在某些情况下会对程序进行转化&#xff0c;有些是编译器需要的&#xff0c;有些是出于性能考虑的&#xff0c;转化可能会产生出乎意料的结果 文章目录 明确的初始化操作参数的初始化返回值的初始化在使用者层面做优化在编译器层面做优化NRV 优化NRV优化的弊端 参考资料 明…

【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【MyBatis】 MyBatis框架下的高效数据操作&#xff1a;深入理解增删查改&#xff08;CRUD&#xff09; &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 My …

算法入门<二>:分治算法之汉诺塔问题及递归造成的栈溢出

1、分治算法 分治&#xff08;divide and conquer&#xff09;&#xff0c;全称分而治之&#xff0c;是一种非常重要且常见的算法策略。分治通常基于递归实现&#xff0c;包括“分”和“治”两个步骤。 分&#xff08;划分阶段&#xff09;&#xff1a;递归地将原问题分解为两…

【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、回调函数二、快速排序(Qsort)2.1 Qsort参数部分介绍2.2 不…

数据仓库和数据仓库分层

一、数据仓库概念 数据仓库(Data Warehouse)&#xff0c;可简写为DW或DWH。数据仓库&#xff0c;是为企业所有级别的决策制定过程&#xff0c;提供所有类型数据支持的战略集合。它是单个数据存储&#xff0c;出于分析性报告和决策支持目的而创建。 为需要业务智能的企业&#…