如何为 QML 创建一个动态的全局主题?

Posted

技术标签:

【中文标题】如何为 QML 创建一个动态的全局主题?【英文标题】:How to create a dynamic global theme for QML? 【发布时间】:2018-09-18 13:52:50 【问题描述】:

这篇declare global property in QML for other QML files 的帖子很好地展示了如何创建一个全局主题,但是您将如何创建一个用户可以轻松切换的主题呢?我想你需要一些全局信号来告诉组件值发生了变化,但它是否已经隐含在对象中?

例如,我想做的是有一个看起来像这样的样式:

pragma Singleton
import QtQuick 2.2


var boolean darkTheme = true;

function employDarkTheme() 
    darkTheme = true;


function employLightTheme() 
    darkTheme = false;


QtObject 

    property QtObject font: QtObject 
        property QtObject pointSize: QtObject 
            property int menu: 10
            property int normal: 12
            property int subTitle: 18
            property int title: 24
        
        property QtObject color: QtObject 
            property color primary: darkTheme ? "black" : "white"
            property color secondary: darkTheme ? "white" : "black"
        
    

    property QtObject background: QtObject 
        property QtObject color: QtObject 
            property color primary: darkTheme ? "#333333" : "white"
            property color secondary: darkTheme ? "white" : "#333333"
        
    

QML 目前的工作方式是否可能出现这种情况?

【问题讨论】:

【参考方案1】:

在玩了一会儿之后,它实际上是可能的并且相当简单。如果不是之前的代码,而是使用:

pragma Singleton
import QtQuick 2.2

QtObject 
    property var darkTheme: true

    property QtObject font: QtObject 
        property QtObject pointSize: QtObject 
            property int menu: 10
            property int normal: 12
            property int subTitle: 18
            property int title: 24
        
        property QtObject color: QtObject 
            property color primary: darkTheme ? "black" : "white"
            property color secondary: darkTheme ? "white" : "black"
        
    

    property QtObject background: QtObject 
        property QtObject color: QtObject 
            property color primary: darkTheme ? "#333333" : "white"
            property color secondary: darkTheme ? "white" : "#333333"
        
    

并随时更改darkTheme,它将更改对象,激活信号/插槽并更改整个应用程序。

【讨论】:

以上是关于如何为 QML 创建一个动态的全局主题?的主要内容,如果未能解决你的问题,请参考以下文章

如何为元素数组动态创建查询?

如何为 QML 布局中的项目指定特定间距?

Qml:如何为所有 GridView 项目设置属性

如何为 iPhone 应用程序创建多个主题/皮肤? [关闭]

如何为 3rd 方渲染提供空 QML 项的 OpenGL 上下文?

如何为 QtCreator 创建自定义主题