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

如果程序要跟随系统主题色进行切换,需监听当前系统的主题色,下面介绍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的逻辑是一样,放到线程中检测。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值