在我的Qt应用程序中,我想让用户选择将应用程序的亮/暗主题设置为:
- 与操作系统主题相同
- 灯光(忽略操作系统主题(
- 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对象分配给此属性会导致应用程序的接口元素采用指定的外观。