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

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;
}


源码下载

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-04 19:00:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-04 19:00:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-04 19:00:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-04 19:00:03       20 阅读

热门阅读

  1. 深入学习Linux内核 - 进程地址空间

    2024-05-04 19:00:03       13 阅读
  2. C语言总结四:函数(压缩版)

    2024-05-04 19:00:03       12 阅读
  3. 简历总结:打造HR无法拒绝的简历

    2024-05-04 19:00:03       12 阅读
  4. 【需求工程概述】

    2024-05-04 19:00:03       11 阅读
  5. springcloud(智慧养老平台)

    2024-05-04 19:00:03       13 阅读
  6. codeforces round 879 div2 (a,b,c)

    2024-05-04 19:00:03       12 阅读
  7. 第Ⅰ章-V package.json文件详解

    2024-05-04 19:00:03       10 阅读
  8. 爬⾍监控与⾃动恢复机制

    2024-05-04 19:00:03       8 阅读