【问题标题】:How to create a dynamic global theme for QML?如何为 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 目前的工作方式是否可能出现这种情况?

【问题讨论】:

    标签: 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,它将更改对象,激活信号/插槽并更改整个应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      相关资源
      最近更新 更多