Skip to content

主题API

ETheme 组件

ETheme 是 EvolveUI 的核心主题管理组件,负责统一管理所有组件的颜色、尺寸、阴影等样式属性。

基本用法

qml
import "components" as Components

Components.ETheme {
    id: theme
    isDark: true // 初始化为深色主题
}

属性

属性名类型默认值描述
isDarkboolfalse是否启用深色主题
primaryColorcolor#6366f1主色调
primaryColorLightcolor#818cf8主色调亮色
primaryColorDarkcolor#4f46e5主色调暗色
secondaryColorcolor#8b5cf6次色调
backgroundColorcolor#f8fafc背景颜色
surfaceColorcolor#ffffff表面颜色
textColorcolor#1e293b文本颜色
textSecondaryColorcolor#64748b次要文本颜色
borderColorcolor#e2e8f0边框颜色
shadowColorcolorrgba(0, 0, 0, 0.1)阴影颜色
successColorcolor#10b981成功颜色
warningColorcolor#f59e0b警告颜色
errorColorcolor#ef4444错误颜色
onPrimaryColorcolor#ffffff主色调上的文本颜色
onSecondaryColorcolor#ffffff次色调上的文本颜色

方法

方法名参数返回值描述
toggleTheme()void切换主题模式(浅色/深色)
setPrimaryColor(color)color: colorvoid设置主色调
setSecondaryColor(color)color: colorvoid设置次色调
reset()void重置主题为默认值

信号

信号名参数描述
themeChangedisDark: bool主题切换时触发
primaryColorChangedcolor: color主色调变化时触发

主题配置示例

qml
Components.ETheme {
    id: customTheme
    isDark: true
    primaryColor: "#0ea5e9"
    secondaryColor: "#22c55e"
    
    Component.onCompleted: {
        console.log("当前主题:", customTheme.isDark ? "深色" : "浅色")
        console.log("主色调:", customTheme.primaryColor)
    }
    
    onThemeChanged: (isDark) => {
        console.log("主题已切换为:", isDark ? "深色" : "浅色")
    }
}

全局主题访问

在应用程序中,您可以通过 theme 全局变量访问当前主题配置:

qml
Components.EButton {
    backgroundColor: theme.primaryColor
    textColor: theme.onPrimaryColor
    radius: theme.borderRadius
}

自定义主题变量

您可以扩展 ETheme 组件以添加自定义主题变量:

qml
Components.ETheme {
    id: extendedTheme
    
    // 添加自定义主题变量
    property color customAccentColor: isDark ? "#ff6b6b" : "#ee5a24"
    property int customSpacing: 16
    
    // 自定义方法
    function getCustomStyle(componentType) {
        switch(componentType) {
            case "card":
                return {
                    backgroundColor: surfaceColor,
                    borderRadius: 12,
                    shadowColor: shadowColor
                }
            case "button":
                return {
                    backgroundColor: primaryColor,
                    textColor: onPrimaryColor
                }
            default:
                return {}
        }
    }
}

使用 VitePress 构建