如何在Objective C中将Mac应用程序用户界面的亮/暗主题设置回默认值



在我的Qt应用程序中,我想让用户选择将应用程序的亮/暗主题设置为:

  1. 与操作系统主题相同
  2. 灯光(忽略操作系统主题(
  3. Dark(忽略操作系统主题(

对于1。我可以使用这个目标C:来确定操作系统主题

bool macIsInDarkTheme()
{
if (__builtin_available(macOS 10.14, *))
{
auto appearance = [NSApp.effectiveAppearance bestMatchFromAppearancesWithNames:
@[ NSAppearanceNameAqua, NSAppearanceNameDarkAqua ]];
return [appearance isEqualToString:NSAppearanceNameDarkAqua];
}
return false;
}

对于2。我可以称之为目标C:

void macSetToLightTheme()
{
if (__builtin_available(macOS 10.14, *))
{
[NSApp setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameAqua]];
}
}

对于3。我可以称之为目标C:

void macSetToDarkTheme()
{
if (__builtin_available(macOS 10.14, *))
{
[NSApp setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameDarkAqua]];
}
}

这一切都有效。如果用户想从2开始,就会出现问题。或3。回到1。如何将外观设置回从操作系统获取的默认外观?我是一名C++程序员,在Objective C.方面没有任何经验

将应用程序的外观设置为零应回退到默认行为(外观继承自系统首选项(:

[NSApp setAppearance:nil];

https://developer.apple.com/documentation/appkit/nsapplication/2967170-appearance?language=objc

当此属性的值为nil(默认值(时,AppKit会将当前系统外观应用于应用程序的用户界面元素,包括其窗口、视图、面板和弹出窗口。将NSApparance对象分配给此属性会导致应用程序的接口元素采用指定的外观。

最新更新