当前位置: 首页 > article >正文

Qt项目实战:图片轮播器

目录

一.设置背景于初始化图像

二·.设置定时器

三.定时器到更新图片

四.鼠标点击暂停更新和打开更新

五.效果

六.代码

1.h

2.cpp


一.设置背景于初始化图像

二·.设置定时器

三.定时器到更新图片

四.鼠标点击暂停更新和打开更新

五.效果

六.代码

1.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    void setimage();

protected:
    bool eventFilter(QObject *watched, QEvent *evt);

private:
    Ui::Widget *ui;

    QTimer* m_pTimer;

    bool isUpdating;
};

#endif // WIDGET_H

2.cpp

#include "widget.h"
#include "ui_widget.h"
#include "qevent.h"
#include <QDebug>
#include <QTimer>

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);

    //透明背景:使用 setAttribute(Qt::WA_TranslucentBackground) 设置窗口为透明背景,这样可以创建更具视觉吸引力的效果。
    this->setAttribute(Qt::WA_TranslucentBackground);
    //无边框窗口:setWindowFlags() 方法将窗口设置为无边框(Qt::FramelessWindowHint),同时保留系统菜单和最小化按钮。
    this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint);
    //事件过滤器:调用 installEventFilter(this) 为 ui->widget 安装事件过滤器,以便处理鼠标事件。
    ui->widget->installEventFilter(this);
    //初始背景图像:通过样式表设置初始的背景图像。
    ui->widget->setStyleSheet(QString("background-image:url(:/image/%1.jfif);").arg(1));

    //定时器, 1s更新图片
    m_pTimer = new QTimer();
    m_pTimer->setInterval(1000);
    connect(m_pTimer, &QTimer::timeout, this, &Widget::setimage);
    m_pTimer->start();

    isUpdating = true;
}

Widget::~Widget()
{
    delete ui;
}

void Widget::setimage()
{
    static int index = 1;

    if(isUpdating){
        if (index == 12) {
            index = 1;
        } else {
            index++;
        }
    }
    ui->widget->setStyleSheet(QString("background-image:url(:/image/%1.jfif);").arg(index));
}

bool Widget::eventFilter(QObject *watched, QEvent *evt)
{
    if (watched == ui->widget && evt->type() == QEvent::MouseButtonPress) {
        QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(evt);
        if (mouseEvent->button() == Qt::LeftButton) {
            isUpdating = !isUpdating; // 切换更新状态

            if (!isUpdating) {
                m_pTimer->stop(); // 停止定时器
            } else {
                m_pTimer->start(); // 恢复定时器
            }
            return true; // 表示事件已处理
        }
    }

    return QWidget::eventFilter(watched, evt); // 否则调用基类的事件过滤器
}


http://www.kler.cn/news/361465.html

相关文章:

  • 人工智能:开启未来生活与工作的新征程
  • 文件处理新纪元:微信小程序的‘快递员’与‘整理师’
  • 抖音列表页采集-前言
  • 2.1.ReactOS系统中断描述符的格式KIDTENTRY结构体
  • Python | Leetcode Python题解之第491题非递减子序列
  • Spire.PDF for .NET【页面设置】演示:在 C# 中应用 PDF 页面转换
  • NC 单据模板自定义项 设置参照(自定义参照)
  • 【硬件问题】——显示器黑屏且只显示鼠标
  • 工具类的构造方法为什么要用private修饰
  • Linux安装最新docker(CentOS 7.6)
  • Github 2024-10-23C开源项目日报 Top10
  • 登录后端笔记(一):注册、登录;基于MD5加密
  • 思迅商云8采购单和批发单可以重复输入一样的货号,用于区别不同生产日期的同样商品的。
  • Java项目实战II基于Spring Boot的毕业就业信息管理系统设计与实现(源码+数据库+文档)
  • Spring Boot:为中小型医院网站提速
  • 在 Spring 中使用 @EhCache 注解作为缓存
  • 2023年五一杯数学建模C题双碳目标下低碳建筑研究求解全过程论文及程序
  • 武汉融资融券开户佣金最低是多少?哪家证券交易两融利率最低?
  • 数据结构修炼——常见的排序算法:插入/希尔/选择/堆排/冒泡/快排/归并/计数
  • 1 -《本地部署开源大模型》如何选择合适的硬件配置
  • OpenR框架深度解读 - OpenAI启发的首个开源项目提升大型语言模型推理能力
  • 基于SpringBoot+Vue+uniapp微信小程序的社区门诊管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
  • uniapp 引入了uview-ui后,打包错误,主包过大解决方案
  • spring boot 3.3.4 网关(gateway) 集成knife4j 4.4.0
  • 插入数据时遇到主键重复问题怎么办?——insert into数据库技巧 (insert into主键重复数据库)
  • Gin框架操作指南03:HTML渲染