《QT实用小工具·五十六》自适应界面变化的控件

news2024/12/23 15:54:42

1、概述
源码放在文章末尾

该项目实现了网格显示多张带文字的图片在界面中自适应布局

特点
跟随窗口大小变换位置,并带移动动画
响应鼠标事件,图片缩放动画
点击水波纹动画

项目demo演示如下所示:
在这里插入图片描述

项目部分代码如下所示:

#ifndef WATERZOOMBUTTON_H
#define WATERZOOMBUTTON_H

#include <QObject>
#include "interactivebuttonbase.h"

class WaterZoomButton : public InteractiveButtonBase
{
public:
    WaterZoomButton(QString text = "", QWidget* parent = nullptr);

    void setChoking(int c);
    void setChokingProp(double p);
    void setRadiusZoom(int radius);
    void setRadius(int x, int x2);

protected:
    QPainterPath getBgPainterPath() override;
    void resizeEvent(QResizeEvent *event) override;

protected:
    int choking; // 向里缩的长度
    double choking_prop;
    int radius_zoom; // 收缩时的半径
};

#endif // WATERZOOMBUTTON_H
#include "waterzoombutton.h"

WaterZoomButton::WaterZoomButton(QString text, QWidget *parent) : InteractiveButtonBase(text, parent)
{
    choking = 10;
    radius_zoom = -1;
    choking_prop = 0;
}

void WaterZoomButton::setChoking(int c)
{
    choking = c;
}

void WaterZoomButton::setChokingProp(double p)
{
    choking = min(width(), height()) * p;
    choking_prop = p;
}

void WaterZoomButton::setRadiusZoom(int radius)
{
    radius_zoom = radius;
}

void WaterZoomButton::setRadius(int x, int x2)
{
    // 注意:最终绘制中只计算 x 的半径,无视 y 的半径
    InteractiveButtonBase::setRadius(x);
    radius_zoom = x2;
}

QPainterPath WaterZoomButton::getBgPainterPath()
{
    QPainterPath path;
    int c;
    int r;
    if (!hover_progress)
    {
        c = choking;
        r = radius_x;
    }
    else
    {
        c = choking * (1 - getNolinearProg(hover_progress, hovering?FastSlower:SlowFaster));
        r = radius_zoom < 0 ? radius_x :
                              radius_x + (radius_zoom-radius_x) * hover_progress / 100;
    }

    if (r)
        path.addRoundedRect(QRect(c,c,size().width()-c*2,size().height()-c*2), r, r);
    else
        path.addRect(QRect(c,c,size().width()-c*2,size().height()-c*2));
    return path;
}

void WaterZoomButton::resizeEvent(QResizeEvent *event)
{
    InteractiveButtonBase::resizeEvent(event);

    if (qAbs(choking_prop)>0.0001)
    {
        choking = min(width(), height()) * choking_prop;
    }
}

源码下载

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

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

相关文章

​可视化大屏C位图:3D模型,可视化大屏的画龙点睛之处

Hello&#xff0c;我是大千UI工场&#xff0c;本期可视化大屏的焦点图&#xff08;C位&#xff09;分享将图表作为焦点图的情形&#xff0c;欢迎友友们关注、评论&#xff0c;如果有订单可私信。 3D模型在可视化大屏中有很大的价值&#xff0c;以下是一些相关的优点&#xff1a…

优优嗨聚集团:法律明灯,个债处理中的法律咨询力量

在现代社会&#xff0c;个人债务问题日益突出&#xff0c;无论是因生活消费、投资失利还是其他原因&#xff0c;债务问题都可能成为个人财务的一大负担。面对复杂的债务困境&#xff0c;许多人感到迷茫和无助。此时&#xff0c;法律咨询如同一盏明灯&#xff0c;能够为个人债务…

GEE数据集——全球冰川海拔变化产品(2000-2019 年)

全球冰川海拔变化产品&#xff08;2000-2019 年&#xff09; 该数据集提供了 2000 年至 2019 年期间冰川海拔和质量变化的全面且全球一致的记录。它利用大量卫星图像&#xff08;主要来自美国国家航空航天局&#xff08;NASA&#xff09;的高级星载热发射和反射辐射计&#xf…

ABAP开发(1)事物代码

文章目录 1、查看系统部分功能的T-code2、T-code使用3、查看未知程序的T-code4、常用T-code 在SAPGUI中&#xff0c;事务代码&#xff08;transaction code&#xff09;&#xff0c;简称T-code&#xff0c;是一个特定的编号&#xff0c;支持自定义&#xff0c;使用户能够快速访…

【AI+音视频总结】如何在几分钟内用智能工具摘取音视频精华?揭秘下一代学习和内容创作神器!

今天无意发现一个网站&#xff0c;可以一步到位完成AI音视频总结。 我之前对于音视频总结的步骤还是借助 工具下载 剪映来完成的。详情可以参考之前写的一篇文章 【AI应用】模仿爆款视频二次创作短视频操作步骤 。 这里介绍的网站是 BibiGPT 。 BibiGPT AI 音视频助理 - 它是…

项目管理-项目沟通管理

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 1.项目沟通管理-主要内容 项目沟通管理过程--重点&#xff1a; ①ITTO 输入&#xff0c;输出工具和技术。 ②问题和解决方案。 ③论文…

公共代理IP和独享代理IP之间的区别?

公共代理IP和独享代理IP在网络应用中扮演着不同的角色&#xff0c;它们之间的区别主要体现在使用方式、性能、安全性以及隐私保护等方面。以下是对这两种代理IP的详细对比和分析。 第一点就是使用的方式以及成本上的不同&#xff0c;公共代理IP&#xff0c;顾名思义&#xff0…

同向双指针(滑动窗口)算法

209. 长度最小的子数组 这里的更新结果就题来定 class Solution {public int minSubArrayLen(int target, int[] nums) {int sum 0;int len 0;int f 0;for(int left 0, right 0; right < nums.length;){//求和sum nums[right];while(sum > target){//lenint t ri…

浪漫编码:手把手教你实现校园表白墙功能

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;浪漫编码&#xff1a;手把手教你实现校园表白墙功能 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 这里写目录标题 表白墙数据准备引入MyBatis和MySQL驱动依赖…

部分设计模式概述

单例模式 工厂模式 适配器模式 模板方法模式 策略模式 责任链 观察者模式&#xff08;又叫发布订阅模式&#xff09;

MySql#MySql数据库基础

目录 一、什么是数据库 二、主流数据库 三、基本使用 1.连接服务器 2.使用 1.查看你数据库 2.创建数据库 ​编辑 ​编辑 ​编辑​编辑 3.使用数据库 ​编辑 4.创建数据库表 5.表中插入数据 6.服务器&#xff0c;数据库&#xff0c;表之间的关系 四、MySQL架构…

【Docker】docker compose服务编排

docker compose 简介 Dockerfile模板文件可以定义一个单独的应用容器&#xff0c;如果需要定义多个容器就需要服务编排。 docker swarm&#xff08;管理跨节点&#xff09; Dockerfile可以让用户管理一个单独的应用容器&#xff1b;而Compose则允许用户在一个模板&#xff08…

关于信息泄露的危害,听听圈内人怎么说......

信息泄露危害之短信轰炸 信息泄露这个事大家要引起重视&#xff0c;会给日常生活带来很多安全风险&#xff0c;例如说&#xff0c;经常收到的垃圾短信、骚扰电话、钓鱼邮件等&#xff0c;一轮接一轮的“轰炸”&#xff0c;让你不堪其扰。 我之前收到的垃圾短信大部分是商铺的广…

You don’t have permission.

The document “XXX” could not be saved. You don’t have permission. 1.查看修改了iOS系统库导致的, 根据提示, 进入到"XXX"文件中, 然后commandz回退/取消 2. Xcode 调试遇到的报错&#xff08;持续更新&#xff09;

Python量化炒股的数据信息获取—获取上市公司分红送股数据信息

Python量化炒股的数据信息获取—获取上市公司分红送股数据信息 上市公司分红送股数据&#xff0c;都存放在STK_XR_XD表中&#xff0c;该表保存在finance包中。要查看表中的数据信息&#xff0c;需要使用query()函数。 单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”…

华为OD机试 - 符号运算 - 递归(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

头歌Hadoop 开发环境搭建及HDFS初体验(第2关:配置开发环境 - Hadoop安装与伪分布式集群搭建)

第1关&#xff1a;配置开发环境 - JavaJDK的配置 第2关&#xff1a;配置开发环境 - Hadoop安装与伪分布式集群搭建 第3关&#xff1a;HDFS系统初体验 注&#xff1a; 1 头歌《Hadoop 开发环境搭建及HDFS初体验》三关在一个实验环境下&#xff0c;需要三关从前往后按顺序评测…

【Mac】 DSync for mac(文件比较同步工具) v2.7安装教程

软件介绍 DSync是一款文件比较同步工具&#xff0c;通过简便的三步即可完成繁琐的比较、同步操作&#xff0c;您甚至可以通过跳过、删除或反转您选择的文件的复制方向来微调您的同步。这是在Mac上同步文件的最简单方法。 安装教程 1.打开安装包&#xff0c;将「DSync」拖到右…

RK3568 学习笔记 : u-boot 下通过设置 env ethact 设置当前工作的以太网设备

前言 正点原子 &#xff1a;RK3568 开发板 atompi-ca1 默认有两个网口&#xff0c;通过 u-boot mii 命令&#xff0c;可以查看 网口信息 > mii device MII devices: ethernetfe010000 ethernetfe2a0000 Current device: ethernetfe010000u-boot 下的以太网&#xff0c;不同…

功能描述如何逻辑

assign相当于连线&#xff0c;注意每个assign独立&#xff0c;如果有变化立刻变化