效果图如下:

思路是将需要轮播的窗口重载一个类,放入QStackedWidget中,通过定时器和QPushButton控制QStackedWidget中的窗口切换实现轮播效果。

重载一个窗口类命名ImageItemWidget
轮播窗口类参数设置

class ImageInfo
{
public:QString logoPath;      //头像QString nickName;       //头像说明int64_t score;         //颜值
public:void clear() {logoPath.clear();nickName.clear();score = 0;}
};

轮播窗口类参数导入

void ImageItemWidget::setValueAndStyle(ImageInfo pEvent)
{QFontMetrics fm(ui.label_uname->font());QString strElidedText = fm.elidedText(pEvent.nickName, Qt::ElideRight, 90, Qt::TextShowMnemonic);ui.label_uname->setText(strElidedText);QString grade = QString::number(pEvent.score);ui.label_grade->setText(QStringLiteral("颜值:%1").arg(grade));QString _logoPath = QStringLiteral(":/image/qrc/image/%1").arg(pEvent.logoPath);QPixmap logo(_logoPath);if (!logo.isNull()) {ui.label_frame->setScaledContents(true);ui.label_frame->setPixmap(logo);}}

创建显示轮播窗口类ImageCarouselWidget

//数据for (int i = 0; i < 5; i++){ImageInfo _pInfo;_pInfo.nickName = QStringLiteral("美女%1").arg(i + 1);_pInfo.logoPath = QStringLiteral("%1.jpg").arg(i + 1);_pInfo.score = 10000 + i * 1000;m_imageItem = new ImageItemWidget();m_imageItem ->setValueAndStyle(_pInfo);ui.stackedWidget->insertWidget(i, m_annualItem);m_ImageInfo.insert(i, _pInfo);}

轮播按钮创建

void ImageCarouselWidget::initChangeButton()
{m_ChangeButtonGroup = new QButtonGroup();int listCount = m_ImageInfo.count();ui.horizontalLayout->addStretch();for (int i = 0; i < listCount; i++){//初始化轮播按钮QPushButton* pButton = new QPushButton;pButton->setFixedSize(QSize(13, 13));pButton->setCheckable(true);pButton->setStyleSheet("QPushButton{border-image:url(:/ToolTip/qrc/unselect1.png);}\QPushButton:checked{border-image:url(:/ToolTip/qrc/select1.png);}");m_ChangeButtonGroup->addButton(pButton, i);m_pChangeButtonList.append(pButton);ui.horizontalLayout->addWidget(pButton);}ui.horizontalLayout->addStretch();ui.horizontalLayout->setSpacing(20);ui.horizontalLayout->setMargin(0);//默认第一个显示if (m_pChangeButtonList.size() > 0) {m_pChangeButtonList[0]->setChecked(true);}connect(m_ChangeButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(sltSwitchButtonClicked(int)));
}

轮播按钮槽函数切换窗口实现

void ImageCarouselWidget::sltSwitchButtonClicked(int index)
{initChangeButtonCheckable(index);
}void ImageCarouselWidget::initChangeButtonCheckable(int index)
{if (m_pChangeButtonList.size() > index) {m_pChangeButtonList[index]->setChecked(true);}m_carouselTimer.stop();m_carouselTimer.start(3000);ui.stackedWidget->setCurrentIndex(index);
}

创建并初始化定时器

 m_carouselTimer.setTimerType(Qt::PreciseTimer);connect(&m_carouselTimer, &QTimer::timeout, this, &vAnnualEvent::sltCarouselTimerOut);m_carouselTimer.start(3000);

定时器槽函数控制窗口轮播

void ImageCarouselWidget::sltCarouselTimerOut()
{int pIndex= ui.stackedWidget->currentIndex();int pCount = ui.stackedWidget->count();// 获取下一个需要显示的页面索引++pIndex;// 当需要显示的页面索引大于等于总页面时,切换至首页if (pIndex>= pCount) pIndex= 0;initChangeButtonCheckable(pIndex);ui.stackedWidget->setCurrentIndex(pIndex);
}

Qt实现窗口轮播效果相关推荐

  1. Qt之实现图片轮播效果

    一.简述 今天文章讲述的是如何用Qt实现图片轮播的效果,其实我们经常在网页中看到各种广告就是使用了图片轮播,实现小区域内嵌入多个广告的效果. 下面是CSDN页面中两种常见的图片轮播效果.基本上就是定时 ...

  2. 基于qt实现网易云界面轮播效果实现

    基于qt实现网易云音乐的轮播效果 网易云轮播效果 前言 其实主要是想做点记录吧,本人比较喜欢音乐,所以在上周决定在搭建一个网易云的界面框架,不做不知道,做了才发现qt还有很多的框架是自己不太熟悉的. ...

  3. 用JQ去实现一个轮播效果

    前提:用JQ去实现轮播效果一步步的做一个梳理. 首先肯定是轮播的HTML和CSS样式了: <body><div class="pic"><div cl ...

  4. 用原生JS实现3D轮播效果

    用原生JS实现3D轮播效果 实现思路: 先实现无缝轮播效果 添加3D效果 完善代码 增加自动轮播效果 效果如下: 视图中显示3张图片,并通过CSS的透视和旋转实现3D效果,当无任何操作时,图片自动循环 ...

  5. vue 实现无限轮播_vue实现匀速轮播效果

    本文实例为大家分享了vue实现匀速轮播效果的具体代码,供大家参考,具体内容如下 不多描述了 直接代码吧 export default { data(){ return{ screenWidth:'', ...

  6. html的轮播点怎么设置,html轮播效果的实现

    要实现如下图的效果 点击可以选择图片:不点击的时候自动轮播:并且点击完后再次自动轮播. 思路:如同在房子里透过窗子看路过的火车一样,窗子是不动的,但火车是陆续经过窗子的,所以透过窗子可以看到依次看完所 ...

  7. QLabel实现图片轮播效果

    QLabel实现图片轮播效果 QLabel实现图片轮播效果 功能 效果图 代码 表白词 功能 继承QLabel控件实现了图片轮播效果 1.自定义添加图片与图片描述: 2.支持2S自动轮播 3.支持鼠标 ...

  8. 【前端学习笔记】仅用CSS实现图片轮播效果

    效果图 实现原理 swiper-container为窗口 swiper-wrapper用于存放所有图片 swiper-slide用于存放每张图片 通过将图片向左移动实现轮播效果 实现代码 <!D ...

  9. 自定义ViewPager实现轮播效果

    您也可以点此浏览,阅读体验更佳 前言 这种轮播效果多应用于展示电影海报,但是效果并不好,有些没有手势动画,更加没有fling效果.我将ViewPager的源码拷贝出来,做了修改,实现了这两个效果. 效 ...

最新文章

  1. JAVA SE学习day_03:包装类、文件操作——file
  2. 串灯控制盒去掉怎么接_单双向可控硅好坏怎么判断
  3. lightbox自定义图片大小的实现
  4. 服务器系统给U盘盘符,五大步骤解决U盘插入电脑盘符不显示问题
  5. 对于怎么理解js中Event Loop,你可以看这篇文章
  6. Layer:layui.util.timeAgo 使用
  7. 不加群提取群成员_QQ群引流推广怎么做
  8. Crontab定时任务表达式
  9. ibm x3850装oracle,Oracle数据库服务器:x3850 X5
  10. SmartSVN忽略文件与文件夹的设置
  11. .NET C# + ECharts 初学笔记 后台加载统计图表数据 - 简单示例
  12. Prolog入门教程(完整版+专家系统案例)
  13. app安全评估报告,如何搞定呢?!
  14. rust Vec 常用操作
  15. 用request获取请求地址Ip
  16. 【瑞芯微Rockchip Linux平台】SoftAp需求实现(3)动态获取BT Mac地址并更新beacon帧中的mac信息
  17. java关于数组的下标越界
  18. 压缩算法(二)——QuickLZ算法
  19. ChatGPT玩法大全火了,一键复制就能get同款效果:脱口秀张口就来,还能扮演哈利波特...
  20. 软考初级程序员—计算机基础试题与解析(待补充)

热门文章

  1. 找出列表中的偶数位元素
  2. android如何从json字符串中取自己想要的数据
  3. 城市空气质量分析与预测
  4. CDN: trunk URL couldn't be downloaded
  5. 10个免费的顶级跨浏览器测试工具
  6. OpenGL学习随笔(三)——2022.1.24
  7. 大型网站技术架构演进
  8. Invalid content was found starting with element ‘{“http://maven.apache.org/POM/4.0.0“:dependency}‘.
  9. Cell Reports : 人脑中的湍流状动力学
  10. 区块链系列----Pos大有可为