Widget自定义动画按钮实战(鼠标进入则放大,离开恢复)

目录

引言

准备工作

步骤一:创建项目和基础控件

步骤二:设计UI

步骤三:自定义按钮类(AniBtn)

步骤四:在主窗口中使用自定义按钮

步骤五:编译和运行

总结


引言

在Qt开发中,自定义控件是一项非常有用的功能,可以让你的应用程序界面更加独特和灵活。本文将通过一个实战案例,展示如何创建一个自定义的按钮控件,该控件在鼠标进入时放大,鼠标离开时恢复原始大小。

准备工作

首先,确保你已经安装了Qt开发环境和Qt Creator IDE。我们将使用Qt Widgets来创建这个自定义控件。

工作目录:

步骤一:创建项目和基础控件

  1. 打开Qt Creator 并新建一个Qt Widgets Application项目。
  2. 设置项目名称(例如QAnimationButtonPro)和保存路径。
  3. 在项目创建完成后,添加一个UI文件(例如QWidget.ui),用于设计界面。

步骤二:设计UI

在Qt Designer中,拖拽四个Widget控件到主窗口中,这将作为我们的基础按钮。你可以调整按钮的大小和位置,以及设置一些基本的样式。后面记得提升为自定义按钮类!!!!!

步骤三:自定义按钮类(AniBtn)

为了创建自定义按钮,我们需要创建一个新的C++类,该类继承自QWidget。

  1. 添加新类:在项目上右键,选择“添加新...” -> “C++ 类”,类名设置为AniBtn,基类选择QWidget。

  2. 编辑anibtn.h

    #ifndef ANIBTN_H
    #define ANIBTN_H#include <QWidget>#include <QVariant>
    //class QPropertyAnimation;#include "qdebug.h"
    #include "qpainter.h"
    #include "qpropertyanimation.h"class AniBtn : public QWidget
    {Q_OBJECT
    public:explicit AniBtn(QWidget *parent = nullptr);~AniBtn();protected:void enterEvent(QEvent *event);     // 鼠标进入事件void leaveEvent(QEvent *event);     // 鼠标离开事件void paintEvent(QPaintEvent *event);// 重新绘制private:bool enter; // 是否进入bool leave; // 是否离开int oldwidth; // 图片原宽度int oldheight; // 图片原高度int pixwidth; // 图片宽度int pixheight; // 图片高度int targetwidth; // 目标图片宽度int targetheight; // 目标图片高度QString text;   // 图像文字QString image;  // 图像路径QPropertyAnimation *enteranimation; // 进入动画QPropertyAnimation *leaveanimation; // 离开动画private slots:void enterimagechanged(QVariant index);void leaveimagechanged(QVariant index);public slots:void settext(QString text); // 显示文字void setimage(QString image); // 显示图像
    };#endif // ANIBTN_H
    

步骤四:在主窗口中使用自定义按钮

  1. 修改animationbutton.ui:将主窗口中的Widget控件提升为Anibtn。在Qt Designer中,选中QPushButton,右键选择“提升为...”,填写类名Anibtn。

  2. 修改animationbutton.h:确保animationbutton.h中包含了Anibtn的头文件。

    #include "anibtn.h"
  3. 在主窗口构造函数中设置按钮

    #include "animationbutton.h"
    #include "ui_animationbutton.h"AnimationButton::AnimationButton(QWidget *parent): QWidget(parent), ui(new Ui::AnimationButton)
    {ui->setupUi(this);QString qss = "color:#BECEC6;background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #1B3152,stop:1 #255C80)";this->setStyleSheet(qss);ui->widget1->settext("邮箱");ui->widget1->setimage(":/images/email.png");ui->widget2->settext("电话");ui->widget2->setimage(":/images/phone.png");ui->widget3->settext("通讯录");ui->widget3->setimage(":/images/user.png");ui->widget4->settext("设置");ui->widget4->setimage(":/images/setting.png");}AnimationButton::~AnimationButton()
    {delete ui;
    }

步骤五:编译和运行

编译并运行你的应用程序。现在,当你将鼠标移动到按钮上时,按钮应该会放大;当鼠标离开时,按钮应该恢复到原始大小。

总结

通过本教程,我们学习了如何在Qt中创建一个自定义的按钮控件,该控件在鼠标进入时放大,鼠标离开时恢复。自定义控件是Qt开发中非常强大的功能,通过继承和重写控件的某些方法,我们可以实现丰富的界面效果。希望这个实战案例对你有所帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

26K star!LLM多智能体AutoGen教程1:让两个Agent给我说相声

在继我们的上篇精彩文章[100行代码演绎AI版“狼人杀”-伟大的人类竟因展现出的战争哲学和领导力出局]演示多智能体协作玩游戏后&#xff0c;展示了多智能体协作的魅力后&#xff0c;你应该已对构建这类创新游戏应用满怀好奇。实际上&#xff0c;AutoGen的舞台远不止于此&#x…

yolov10在地平线旭日X3派上的部署和测试(Python版本和C++版本)

0、搭建开发环境 当前的测试根据一下的步骤并修改源码是可以实现yolov8的板端运行&#xff0c;如果不想再搭建环境和测试代码bug上浪费更多的时间可以直接获取本人的测试虚拟机&#xff0c;所有的测试代码、虚拟环境和板端测试工程以全部打包到了虚拟机&#xff0c;需要的可以…

Spark累加器(Accumulator)

1.累加器类型&#xff1a; 数值累加器&#xff1a;用于计算总和、计数等。布尔累加器&#xff1a;用于计算满足特定条件的次数。自定义累加器&#xff1a;允许定义复杂的聚合逻辑和数据结构。集合累加器&#xff1a;用于计算唯一元素的数量&#xff0c;处理去重操作。 在 Spar…

速看!2024年5月软考通过率解析

根据湖南省工业和信息化厅最新发布的《2024年上半年软考湖南考区工作总结报告》及《考试安全顺利完成的通报》&#xff0c;我们了解到湖南地区在2024年上半年度的软件与信息技术专业人才考试&#xff08;简称“软考”&#xff09;中&#xff0c;报名人数达到了13,762人&#xf…

Kafka知识总结(事务+数据存储+请求模型+常见场景)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 事务 事务Producer保证消息写入分区的原子性&#xff0c;即这批消…

从零到一:用Go语言构建你的第一个Web服务

使用Go语言从零开始搭建一个Web服务&#xff0c;包括环境搭建、路由处理、中间件使用、JSON和表单数据处理等关键步骤&#xff0c;提供丰富的代码示例。 关注TechLead&#xff0c;复旦博士&#xff0c;分享云服务领域全维度开发技术。拥有10年互联网服务架构、AI产品研发经验、…

【HadoopShuffle原理剖析】基础篇二

Shuffle原理剖析 Shuffle&#xff0c;是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程。分为Map端的操作和Reduce端的操作。 Shuffle过程 Map端的Shuffle Map的输出结果首先被缓存到内存&#xff0c;当缓存区容量到达80%&#xff08;缓冲区默认100MB&#xff…

通过进程协作显示图像-C#

前言 如果一个软件比较复杂或者某些情况下需要拆解&#xff0c;可以考试将软件分解成两个或多个进程&#xff0c;但常规的消息传递又不能完全够用&#xff0c;使用消息共享内存&#xff0c;实现图像传递&#xff0c;当然性能这个方面我并没有测试&#xff0c;仅是一种解决思路…

Tekion 选择 ClickHouse Cloud 提升应用性能和指标监控

本文字数&#xff1a;4187&#xff1b;估计阅读时间&#xff1a;11 分钟 作者&#xff1a;ClickHouse team 本文在公众号【ClickHouseInc】首发 Tekion 由前 Tesla CIO Jay Vijayan 于 2016 年创立&#xff0c;利用大数据、人工智能和物联网等技术&#xff0c;为其汽车客户解决…

如何通过 CloudCanal 实现从 Kafka 到 AutoMQ 的数据迁移

01 引言 随着大数据技术的飞速发展&#xff0c;Apache Kafka 作为一种高吞吐量、低延迟的分布式消息系统&#xff0c;已经成为企业实时数据处理的核心组件。然而&#xff0c;随着业务的扩展和技术的发展&#xff0c;企业面临着不断增加的存储成本和运维复杂性问题。为了更好地…

【数据中台】大数据管理平台建设方案(原件资料)

建设大数据管理中台&#xff0c;按照统一的数据规范和标准体系&#xff0c;构建统一数据采集&#xfe63;治理&#xfe63;共享标准、统一技术开发体系、统一接口 API &#xff0c;实现数据采集、平台治理&#xff0c;业务应用三层解耦&#xff0c;并按照统一标准格式提供高效的…

electron安装及快速创建

electron安装及快速创建 electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 详细内容见官网&#xff1a;https://www.electronjs.org/zh/docs/latest/。 今天来记录下练习中的安装过程和hello world的创建。 创建项目文件夹&#xff0c;并执行npm 初始化命…

ubuntu安装tar安装 nginx最新版本

一、需要先安装依赖 apt install gcc libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev 二、上传安装包 并解压 下载地址 nginx news tar xvf nginx-1.25.2.tar.gz 进入nginx cd nginx-1.25.2 三、编译 ./configure --prefix=/usr/local/nginx --with-htt…

Dolphinscheduler 3.2.1bug记录

问题1&#xff1a;分页只展示首页 解决方案&#xff1a; [Bug][API] list paging missing totalpage by Gallardot Pull Request #15619 apache/dolphinscheduler GitHub 问题2:Hive 数据源连接失败 解决方案&#xff1a;修改源码&#xff1a;HiveDataSourceProcessor.cla…

《深度RAG系列》 LLM 为什么选择了RAG

2023年是AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;元年&#xff0c;这一年见证了人工智能生成内容领域的巨大飞跃&#xff0c;特别是大模型的爆发&#xff0c;它们在自然语言处理、图像生成、音频处理等多个领域展现出了惊人的能力。 这些预训练…

数据结构和算法入门

1.了解数据结构和算法 1.1 二分查找 二分查找&#xff08;Binary Search&#xff09;是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两半&#xff0c;然后比较目标值与中间元素的大小关系&#xff0c;从而确定应该在左半部分还是右半部分继续查找。这个…

花8000元去培训机构学习网络安全值得吗,学成后就业前景如何?

我就是从培训机构学的网络安全&#xff0c;线下五六个月&#xff0c;当时学费不到一万&#xff0c;目前已成功入行。所以&#xff0c;只要你下决心要入这一行&#xff0c;过程中能好好学&#xff0c;那这8000就花得值~ 因为只要学得好&#xff0c;工作两个多月就能赚回学费&am…

浅谈取样器之OS进程取样器

浅谈取样器之OS进程取样器 JMeter 的 OS 进程取样器&#xff08;OSProcess Sampler&#xff09;允许用户在 JMeter 测试计划中直接执行操作系统命令或脚本。这一功能对于需要集成系统级操作到性能测试场景中尤为有用&#xff0c;比如运行数据库备份脚本、调用系统维护命令或执…

存储引擎MyISAM和InnoDB

存储引擎&#xff1a;创建、查询、更新、删除 innoDB&#xff1a;64T、支持事物、不支持全文索引、支持缓存、支持外键、行级锁定 MyISAM&#xff1a;256T、不支持事物、支持全文索引、插入和查询速度快 memory&#xff1a;内存、不支持事物、不支持全文索引&#xff0c;临时…

不得不安利的程序员开发神器,太赞了!!

作为一名程序员&#xff0c;你是否常常为繁琐的后端服务而感到头疼&#xff1f;是否希望有一种工具可以帮你简化开发流程&#xff0c;让你专注于创意和功能开发&#xff1f;今天&#xff0c;我要向大家隆重推荐一款绝佳的开发神器——MemFire Cloud。它专为懒人开发者准备&…