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

news2024/9/23 11:27:50

目录

引言

准备工作

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

步骤二:设计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.coloradmin.cn/o/1964332.html

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

相关文章

226翻转二叉树

解题思路&#xff1a; \qquad 树相关的题&#xff0c;大部分都可以通过递归来解决。因为树结构&#xff08;尤其是二叉树&#xff09;天然地具有递归发展的性质&#xff1a;对于二叉树的每个树节点&#xff0c;都有一个左节点和一个右节点&#xff0c;且能无限重复延伸。 \qqu…

World of Warcraft [retail] 100G download 2024.07.31

正式服 D:\Battle.net\World of Warcraft\_retail_

微信小程序-选中文本时选中checkbox

1.使用labe嵌套住checkbox标签 <label class"label-box"> <checkbox >匿名提交</checkbox> </label>2.使checkbox和label组件在同一行 .label-box{display: flex;align-items: center; }效果图 此时选中文本匿名提交&#xff0c;checkbox…

ft232 win10驱动

ft232 win10驱动 https://ftdichip.com/drivers/d2xx-drivers/

2024年导游资格证考试报名照很严格!

2024年导游资格证考试报名照很严格&#xff01; #导游证考试 #导游证 #导游资格证考试 #导游资格证 #全国导游证考试 #导游证报名

初学者如何快速掌握工程项目管理软件?

国内外主流的10款工程项目管理系统软件对比&#xff1a;PingCode、Worktile、金蝶EAS、用友NC、汉得信息H3 BPM、SAP ERP、Wrike、Zoho Projects、Accelo、Celoxis。 选择合适的工程项目管理系统软件往往令许多项目经理和团队感到头痛。这不仅关系到项目的效率和成功率&#xf…

C++初学(8)

8.1、string类简介 现在可以用string类型的变量而不是字符数组来存储字符串&#xff0c;string类也用的会比数组简单&#xff0c;同时提供了将字符串作为一种数据类型的表示方式。 要使用string类&#xff0c;必须在程序中包含头文件string。string类位于名称空间std中&#…

昇思25天学习打卡营第XX天|GAN图像生成

感觉顺序要调整下&#xff0c;先GAN再DCGAN再Diffusion 生成式对抗网络&#xff08;GAN&#xff09;是一种前沿的无监督学习模型&#xff0c;由Goodfellow在2014年提出。它包含生成器和判别器两个对抗组件&#xff1a;生成器负责创造逼真的假图像&#xff0c;判别器则判断图像…

多语种语音合成数据,拓宽语音大模型边界

近期&#xff0c;一个名为 ChatTTS 的文本转语音项目爆火出圈&#xff0c;在 GitHub 上已经斩获了 28 k 的 Star 量。 作为一款专门为对话场景设计的语音生成模型&#xff0c;ChatTTS 支持英文和中文两种语言。针对对话式任务进行了优化&#xff0c;实现了自然流畅的语音合成。…

PG物理复制剖析

文章目录 一、物理复制概述二、同步流复制三、pg_basebackup原理源码剖析主流程具体过程 四、主从原理基本介绍1、 WAL日志文件复制2、流复制&#xff08;Streaming Replication&#xff09; 主从原理主从间的通信walsender与walreceiver过程发生故障时的行为扩展问题 一、物理…

KylinSP3 | 一篇搞定金砖信息技术应用创新赛Docker容器集群管理

KylinSP3 | 一篇搞定金砖信息技术应用创新赛Docker容器集群管理 一、知识准备1. Docker介绍2. 四大对象2.1 镜像2.2 容器2.3 网络2.4 数据卷3. Namespace介绍3.1 PID 名字空间3.2 net名字空间3.3 ipc名字空间3.4 mnt 名字空间3.5 uts名字空间3.6 user名字空间4.Docker底层原理-…

linux离线环境下安装anaconda

文章目录 背景下载及传输安装包传输安装包到linux服务器安装anacondash执行安装命令回车接受许可修改安装路径等待解压安装包添加用户环境变量 测试anaconda重新打开终端查看虚拟环境及路径使用ipython进行测试 参考文献 背景 基于内网离linux线环境下&#xff0c;且账号无roo…

Mojo编程语言:AI开发者的未来之选——代码实战解析

1. 引言 在人工智能&#xff08;AI&#xff09;领域&#xff0c;编程语言的选择对于开发效率和性能至关重要。随着AI技术的快速发展&#xff0c;开发者们对编程语言的需求也在不断演变。在这样的背景下&#xff0c;Mojo编程语言应运而生&#xff0c;它以其独特的特性和优势&am…

尚品汇-CompletableFuture异步编排-优化商品详情页(二十五)

目录&#xff1a; &#xff08;1&#xff09;创建异步对象 &#xff08;2&#xff09;计算完成时回调方法 &#xff08;3&#xff09;线程串行化与并行化方法 &#xff08;4&#xff09;多任务组合 &#xff08;5&#xff09;优化商品详情页 &#xff08;1&#xff09;创…

开启智能开发的新纪元:探索 GPT-4o mini 模型的无限可能

引言 随着人工智能技术的飞速发展&#xff0c;大型语言模型已成为推动软件开发和创新的关键力量。OpenAI 最新发布的 GPT-4o mini 模型以其卓越的性能和极具竞争力的价格&#xff0c;为开发者社区带来了新的活力。本文将探讨 GPT-4o mini 模型的特性&#xff0c;以及它如何帮助…

python ix什么意思

Pandas库中有iloc和loc以及ix可以用来索引数据&#xff0c;抽取数据。ix是一种混合索引&#xff0c;字符型标签和整型数据索引都可以。 在pandas版本0.20.0及其以后版本中&#xff0c;ix已经不被推荐使用&#xff0c;建议采用iloc和loc实现ix。这是为什么呢&#xff1f;这是由…

19017 编译依赖问题(拓扑排序)

这个问题可以通过拓扑排序来解决。拓扑排序是一种对有向无环图&#xff08;DAG&#xff09;进行排序的算法&#xff0c;它会按照依赖关系生成一个线性序列。在这个问题中&#xff0c;我们可以将文件的依赖关系看作是一个有向无环图&#xff0c;然后使用拓扑排序来生成编译顺序。…

先进的硬件设备将人工智能能耗降低1000倍

明尼苏达大学双城分校的工程研究人员开发出一种先进的硬件设备&#xff0c;可将人工智能&#xff08;AI&#xff09;计算应用中的能耗至少降低 1000 倍。这项研究发表在《自然》杂志出版的同行评审科学杂志《npj 非常规计算》上。研究人员拥有该设备所用技术的多项专利。 随着…

实时数仓Hologres TPC-H及点查性能开箱测试

实时数仓Hologres是阿里云自研一站式实时数仓引擎&#xff0c;提供统一、实时、弹性、易用的一站式实时数仓引擎&#xff0c;分析性能打破TPC-H世界记录&#xff0c;一份数据可同时支持多维分析&#xff08;OLAP&#xff09;、即席分析&#xff08;Ad Hoc&#xff09;、点查&am…

昇思25天学习打卡营第XX天|10-使用静态图加速

MindSpore设计的AI编译框架提供了动态图和静态图两种运行模式&#xff0c;用户可根据需求在这两种模式间手动切换&#xff0c;以平衡开发效率与运行性能。 动态图模式&#xff08;PyNative&#xff09;允许模型构建与计算同步进行&#xff0c;便于调试&#xff0c;但优化受限。…