《QT实用小工具·六十三》QT实现微动背景,界面看似静态实则动态

news2024/11/24 12:40:04

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

该项目实现了微动背景,界面看似静态实则动态,风动,幡动,仁者心动,所以到底是什么在动?哈哈~

界面会偷偷一点一点改动文字颜色的颜色填充。

虽然是动态,但是慢到难以发觉,最适合大段文字的长期阅读与写作。
不是简单的定时改变的纯色/渐变填充,还可以设置颜色变化边界、颜色数量、角度、渐变比例等。

下面是demo显示:
在这里插入图片描述
项目部分代码如下所示:

#ifndef DYNAMICBACKGROUNDPURE_H
#define DYNAMICBACKGROUNDPURE_H

#include "dynamicbackgroundinterface.h"

class DynamicBackgroundPure : public DynamicBackgroundInterface
{
public:
    DynamicBackgroundPure(QWidget *parent,
    	QColor color1=QColor(255, 250, 240),/*花卉白*/
    	QColor color2=QColor(253, 245, 230)/*舊蕾絲色*/
    	);

    void setColor(QColor color1, QColor color2);
    void draw(QPainter& painter);

protected:
    void timeout();

private:
    ColorArray c1, c2, c;
    ColorArray d;
    ColorDirects a;

    QColor draw_color;
};

#endif // DYNAMICBACKGROUNDPURE_H
#include "dynamicbackgroundpure.h"

DynamicBackgroundPure::DynamicBackgroundPure(QWidget* parent, QColor color1, QColor color2)
    : DynamicBackgroundInterface (parent)
{
    setColor(color1, color2);
}

void DynamicBackgroundPure::setColor(QColor color1, QColor color2)
{
    // 阈值
    colorToArray(c1, color1);
    colorToArray(c2, color2);

    // 设置各种属性
    for (int i = 1; i <= 4; i++)
    {
        a[i] = randBool(); // 随机变化方向
        c[i] = randRange(c1[i], c2[i]); // 初始随机颜色
        d[i] = intToUnity(c2[i]-c1[i]); // 每次变化的方向,false向1变化,true向2变化
        if (c[i] == c1[i]) a[i] = true;
        if (c[i] == c2[i]) a[i] = false;
    }

    draw_color = QColor(c[cR], c[cG], c[cB], c[cA]);
}

void DynamicBackgroundPure::draw(QPainter &painter)
{
    painter.save();
    {
        // 绘制矩形
        painter.setBrush(draw_color);
        painter.drawRect(getGeometry());
    }
    painter.restore();
}

void DynamicBackgroundPure::timeout()
{
    // 随机变化
    int t = randRange(1, 4);
    c[t] += a[t] ? d[t] : -d[t];
    if (c[t] == c1[t]) a[t] = true;
    if (c[t] == c2[t]) a[t] = false;

    draw_color = QColor(c[cR], c[cG], c[cB], c[cA]);

    DynamicBackgroundInterface::timeout();
}

源码下载

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

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

相关文章

羊大师解析,如何遵守《节约用水条例》

羊大师解析&#xff0c;如何遵守《节约用水条例》 《节约用水条例》的实施旨在倡导和推动全社会形成节约用水的良好风尚&#xff0c;以应对日益严峻的水资源短缺问题。羊大师发现随着这一条例的深入实施&#xff0c;越来越多的人开始意识到节约用水的重要性&#xff0c;并积极…

HTML5实现简洁好看的个人主页,个人小站(多种风格附源码)

文章目录 1.烟灰主题个人主页1.1 个人主页界面1.2 个人信息界面1.3 兴趣爱好界面1.4 个人作品界面 2.紫霞主题个人主页2.1 个人主页界面2.2 个人信息界面2.3 兴趣爱好界面2.4 个人作品界面 3.墨夜主题个人主页3.1 个人主页界面3.2 个人信息界面3.3 兴趣爱好界面3.4 个人作品界面…

《小猫咪大城市》 48小时销量破40万套,一匹休闲游戏黑马诞生

易采游戏网5月13日消息&#xff0c;近日一款名为《小猫咪大城市》的游戏在Steam、Switch和Xbox平台上正式发售&#xff0c;凭借其独特的游戏设定和可爱的猫咪角色&#xff0c;迅速赢得了玩家们的喜爱。据官方宣布&#xff0c;游戏在发售后的短短48小时内&#xff0c;销量已经突…

汽车灯罩材料使用PMMA(亚克力)具有哪些优势?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

汽车灯罩材料使用PMMA&#xff08;亚克力&#xff09;具有哪些优势 首先&#xff0c;PMMA具有高透明度&#xff0c;其透光率可达92%以上&#xff0c;使得光线能够均匀、清晰地透过灯罩&#xff0c;为驾驶者提供明亮且均匀的照明效果&#xff0c;确保行车安全。 其次&#xff…

JavaEE初阶-多线程进阶1

文章目录 前言一、常见的锁策略1.1 乐观锁与悲观锁1.2 重量级锁与轻量级锁1.3 自旋锁与挂起等待锁1.4 可重入锁与不可重入锁1.5 公平锁与非公平锁1.6 互斥锁与读写锁 二、synchronized的优化策略2.1 锁升级2.2 锁消除2.3 锁粗化 前言 多线程进阶的内容在面试中容易考&#xff…

解决SpringBoot整合MyBatis和MyBatis-Plus,请求后不打印sql日志

问题发现 在整合springBootmyBatis时&#xff0c;发现请求不打印sql日志&#xff0c;示例代码如下&#xff1a; RestController public class MyController {AutowiredProductMapper productMapper;GetMapping("/test")public void test() {System.out.println(&qu…

【知识碎片】2024_05_12

本篇记录了两个代码题【字符个数的统计】和【多数元素】(下有一段快排的代码)&#xff0c;以及两个关于数组的选择题。 每日代码 字符个数统计 字符个数统计_牛客题霸_牛客网 统计ascall码在0~127内的字符出现过几次&#xff08;重复出不再计算&#xff09; #include <st…

快速入门:利用Go语言下载Amazon商品信息的步骤详解

概述 在这篇文章中&#xff0c;我们将深入探讨如何利用Go语言这一强大的工具&#xff0c;结合代理IP技术和多线程技术&#xff0c;实现高效下载Amazon的商品信息。首先&#xff0c;让我们来看看为什么选择Go语言作为开发网络爬虫的首选语言。 Go语言在网络开发中的特点 简洁…

Redis五大基本数据类型介绍及其使用场景

文章目录 1 String&#xff08;字符串&#xff09;应用场景 2 List&#xff08;列表&#xff09;应用场景 3 Set&#xff08;集合&#xff09;4 sorted set&#xff08;有序集合&#xff09;应用场景 5 hash&#xff08;哈希&#xff09;应用场景 Redis 是一个开源&#xff0c;…

Spring Boot集成zookeeper快速入门Demo

1.什么是zookeeper&#xff1f; Zookeeper 是一个开源的分布式协调服务&#xff0c;目前由 Apache 进行维护。Zookeeper 可以用于实现分布式系统中常见的发布/订阅、负载均衡、命令服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。它具有以下特性…

webAPIs第二天

事件监听 什么是事件&#xff1f; 事件是在编程时系统内发生的动作或者发生的事情 比如用户在网页上单击一个按钮 什么是事件监听&#xff1f; 就是让程序检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就立即调用一个函数做出响应&#xff0c;也称为 绑定事件或者…

常用的30个linux命令总结

1、常用30个命令总结 2、具体参数用法参考网站&#xff1a; Linux命令大全(手册) – 真正好用的Linux命令在线查询网站

Linux提权--第三方软件MYSQL数据库提权(WEB+本地)

免责声明:本文仅做技术交流与学习,非法搞事后果自负... 目录 靶场镜像: 过程: 手工: 下载mysql udf poc 进行编译. 进入数据库进行UDF导出 下载(上传) 创建do_system函数调用 探针(./LinEnum.sh),查找suid权限. 配合使用find调用执行 工具: 过程: 外连不上? 隧道出…

【网络安全入门】你必须要有的学习工具(附安装包)零基础入门到进阶,看这一篇就够了!

工欲善其事必先利其器 在新入门网络安全的小伙伴而言。这些工具你必须要有所了解。本文我们简单说说这些网络安全工具吧&#xff01; Web安全类 Web类工具主要是通过各种扫描工具&#xff0c;发现web站点存在的各种漏洞如sql注入、xss等。从而获取系统权限&#xff0c;常用的…

Node.js版本管理工具nvm安装

1.下载nvm https://github.com/coreybutler/nvm-windows/releaseshttps://github.com/coreybutler/nvm-windows/releases 2.安装nvm 双击打开下载好的压缩包解压出的文件 目录中不要有中文 这个是配置切换node版本后的存储位置 然后一路下一步就行了 3.安装并使用node 安装…

vue uniapp 小程序 判断日期是今天(显示时分秒)、昨天、本周的周几、超出本周显示年月日

效果图&#xff1a; util.js /*** 转换时间*/ const messageFormat (datetime) >{ let result "";let currentTime new Date();if(isToday(datetime)){result datetime.substring(11,16);}else if(isYesterday(datetime)){result "昨天";}else if(…

代码随想录阅读笔记-动态规划【爬楼梯】

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 示例 1&#xff1a; 输入&#xff1a; 2输出&#xff1a; 2解释&#xff1a; 有两种方法可以爬到楼…

2024年小程序视频如何下载到手机

在2024年的数字时代&#xff0c;小程序已成为我们生活中不可或缺的一部分&#xff0c;它们如同星辰般点缀在我们的日常之中&#xff0c;为我们带来便捷与乐趣。然而&#xff0c;你是否曾因网络的不稳定而错失了那些精彩绝伦的小程序视频&#xff1f;是否曾在离线的时刻&#xf…

面试高频知识点:Java互联网大厂高频面试题(持续收录)

文章目录 前言一、Java基础题1、Java语言的三大特性2、JDK 和 JRE 有什么区别3、Java基本数据类型及其封装类4、说明一下public static void main(String args[])这段声明里关键字的作用5、java的数据结构有哪些&#xff1f;6、抽象类和接口的区别?7、 与 equals 的区别8、Str…

导航app为什么知道还有几秒变绿灯?

在使用地图导航app行驶至信号灯的交叉路口时&#xff0c;这些应用程序会贴心地告知用户距信号灯变化还有多少秒&#xff0c;无论是即将转为绿灯还是红灯。这一智能化提示不仅使得驾驶员能适时做好起步或刹车的准备&#xff0c;有效缓解了因等待时间不确定而产生的焦虑情绪&…