程序跟随系统主题色切换主题

news2025/1/12 12:17:39

如果程序要跟随系统主题色进行切换,需监听当前系统的主题色,下面介绍Windows和MacOS下获取当前系统主题的方法

Windows

系统切换主题

以win10为例,点击右键选择个性化,进入个性化页面,选择左侧颜色的Tab,

选择右边的选择颜色下拉框,可以看到有三个选项,浅色和深色就很好理解,选择自定义可以看到会多两个选项,一个是系统的主题色,一个是应用的主题色。选择浅色时,系统主题色和应用主题色都是浅色,选择深色时系统主题色和应用主题色都是深色,自定义用于系统主题色和应用主题色分开设置。系统主题色指的是系统窗口的主题色,比如任务栏,任务栏右键菜单,开始菜单等等,我们以应用的主题色为基准进行变化。

读注册表获取系统主题

Windows系统配置都是存储在注册表,经过查资料,找到主题设置相关的注册表位置,计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize,选择Personalize,右侧显示主题相关的设置项,其中SystemUsesLightTheme对应自定义设置项中的默认Windows模式,AppsUseLightTheme对应自定义设置中的默认应用模式。

代码实现

使用Qt获取该注册表的信息即可知道当前系统设置的主题色

QSettings settings(QSettings::UserScope, "Microsoft", "Windows\\CurrentVersion\\Themes\\Personalize");
bool isDark = !settings.value("AppsUseLightTheme").toBool();//0:深色 - 1:浅色

我们要实现自动跟随系统切换,只需放到线程中一直检测即可

MacOS

系统主题设置

Mac系统的主题设置就比较简单明了,Mac的系统多了一项自动,会根据环境切换主题,比如天黑了会自动切换成深色主题

Mac是有命令直接获取当前是否为深色模式,

defaults read -g AppleInterfaceStyle,如果是深色模式,则返回Dark,如果不是深色,则会返回找不到

代码实现

代码实现不是通过执行命令行获取,Mac有专门的方法,需要注意的是该代码是objective-c,需放到.mm文件中,之前有文章介绍过.mm相关的内容。

NSString *interfaceStyle = [NSUserDefaults.standardUserDefaults valueForKey:@"AppleInterfaceStyle"];
BOOL dark =  [interfaceStyle isEqualToString:@"Dark"];

自动跟随系统变化和Win的逻辑是一样,放到线程中检测。

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

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

相关文章

mp3格式转换器哪个好用?汇总七款音频格式转换方法(无损转换)

音乐已经成为我们生活中不可或缺的一部分。但是在播放的时候,可能会遇到音频格式不兼容的情况。特别是在一些下载站或音乐平台获取的音频,有些特殊格式在播放器上无法正常播放,一般这种情况我们需要借助mp3转换器解决。 mp3是一种常见的数字音…

三更的springsecurity课程个人笔记总计4万字,全部测试通过,代码cv即可

SpringSecurity b站 40.源码讲解部分说明_哔哩哔哩_bilibili BV1mm4y1X7Hc 以下全为个人总结,不能代表官方,有错误还请指出(全部测试通过)(1刷视频) 1-简介 tip 接下来的所有类不会包含import信息&am…

爬虫代理教程:爬虫代理池部署+高并发实现方法

在数据爬取的世界里,代理IP就像是爬虫的隐身衣,帮助我们在网络上自由穿梭,避免被目标网站识别封禁。今天我就来分享一下爬虫代理池的部署和高并发实现的技巧,希望能对大家有所帮助。 什么是爬虫代理池? 首先&#xf…

nginx下载安装及使用教程

一、打开下载官网:nginx 选择稳定版本(windows) 然后就是解压安装到指定目录下 二、启动nginx 使用cmd命令提示符进入,输入一下命令(注意:回车确认是会出现一闪,这是正常现象) 查看任务进程是否…

Flink学习之Flink SQL(补)

Flink SQL 1、SQL客户端 1.1 基本使用 启动yarn-session yarn-session.sh -d启动Flink SQL客户端 sql-client.sh--退出客户端 exit;测试 重启SQL客户端之后,需要重新建表 -- 构建Kafka Source -- 无界流 drop table if exists students_kafka_source; CREATE TABL…

SourceTree配置多个不同Remote地址的仓库

需求 在我们开发过程中,有可能需要拉取的地址仓库不在同一个仓库中,有些可能在Github上,有些可能在Gitlab上。 所以我们需要配置Github的仓库的配置和Gitlab仓库的配置。 现在,我们来配置两个不同的仓库的地址。 假设&#xf…

快速体验LLaMA-Factory 私有化部署和高效微调Llama3模型FAQ

序言 之前已经介绍了在超算互联网平台SCNet上使用异构加速卡AI 显存64GB PCIE,私有化部署Llama3模型,并对 Llama3-8B-Instruct 模型进行 LoRA 微调、推理和合并 ,详细内容请参考另一篇博客:快速体验LLaMA-Factory 私有化部署和高…

Android14音频进阶之命令行播放音频(八十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更…

SpringDI(依赖注入)的理解

目录 一、什么是SpringDI? 二、SpringDI(依赖注入)的作用是什么? 三、DI的实现方式 3.1 set注入 1.项目结构: 2.set注入对象 2.1applicationContext.xml: 2.2 Student 实体类 2.3 controller: 2.4 da…

SpringIOC容器对Bean管理

一、bean实例化 1.通过构造方法(默认) 2.通过工厂方法 3.通过静态工厂方法 项目结构: 1. 通过构造方法(默认) 1.1 pojo实体类: Student: public class Student {public Student() {System.out.println…

软件安全测试报告内容和作用简析,软件测试服务供应商推荐

在数字化时代,软件安全问题愈发凸显,安全测试显得尤为重要。软件安全测试报告是对软件系统在安全性方面进行评估和分析后的书面文件。该报告通常包含测试过程、测试发现、漏洞描述、风险评估及改进建议等重要信息。报告的目的是为了帮助开发团队及时发现…

各种排序算法【持续更新中.....】

1.归并排序 归并排序 ,归并排序是采用分治法(Divide and Conquer)的一个非常典型的应用,所以我们先来说一下什么是分治法。 分治法 定义 分治(英语:Divide and Conquer),字面上的解释是「分…

C++初阶大全

目录 一.命名空间 1.命名空间定义 2.命名空间使用 二.C输入&输出 三.缺省参数 四. 函数重载 五.引用 1.常引用 2.传值、传引用效率比较 3.引用和指针的区别 4.引用和指针的不同点: 小知识点: 六.内联函数 七.auto关键字(C11) 1.auto的使用细则 八.基于范围…

为何你的进销存系统买来却成了摆设?教你7大招解决!

我做企业数字化系统9年,调研的企业大大小小也有几十家了。我发现个挺扎心的现象:有三成企业买的进销存系统,最后都成了闲置的“高科技装饰品”。为啥这些企业舍得掏腰包,到头来却让它们吃灰呢? 说到底,就一…

开源免费的wiki知识库

开源的Wiki知识库有多种选择,它们各自具有不同的特点和优势,适用于不同的场景和需求。以下是一些主流的开源Wiki知识库系统: MediaWiki 简介:MediaWiki是使用PHP编写的免费开源Wiki软件包,是Wikipedia和其他Wikimedia…

达梦数据库的系统视图v$mem_reginfo

达梦数据库的系统视图v$mem_reginfo 达梦数据库的V$MEM_REGINFO视图提供了系统当前已分配但未释放的内存信息。这个视图在MEMORY_LEAK_CHECK参数设置为1时才会注册信息,用于监控内存的申请和释放情况。通过查询V$MEM_REGINFO视图,可以关注REFNUM字段&am…

跟《经济学人》学英文:2024年08月03日这期 Britain’s railways go from one extreme to another

Britain’s railways go from one extreme to another Departing: privatisation. Destination: centralisation 出发:私有化。目的地:集中化 depart:出发 privatisation:美 [ˌpraɪvətaɪ’zeɪʃən] 私有化;民营化;私营化…

IO进程—进程间的通信—共享内存具体函数操作

创建唯一key值—— ftok key_t ftok(const char *pathname, int proj_id); #include <sys/types.h> #include <sys/ipc.h> 功能&#xff1a; ftok函数是用于生成一个键值&#xff08;key_t类型&#xff09;的函数&#xff0c;这个键值通常用于进程间通信&#xff0…

人像修复-通道磨皮

文章目录 原理步骤建立动作一键操作 原理 皮肤看起来比较脏的原因&#xff1a;光影过渡不均匀 步骤 在通道中&#xff0c;找到明暗反差最大的通道&#xff0c;复制一层通道 在复制通道中&#xff0c;用高反差保留&#xff0c;把画面中反差较大的部分保留出来&#xff0c;半…

解决使用Navicat连接数据库时,打开数据库表很慢的问题

今天使用Navicat连接数据库时&#xff0c;发现不管表中数据多少&#xff0c;打开数据库表非常慢。 解决方法&#xff1a; Navicat - 右键编辑数据库连接 - 高级 - 勾选保持连接间隔 - 输入框设置为20 - 点击确定&#xff01; 参考文章&#xff1a;https://51.ruyo.net/14030.…