qml - 如何为 QML 创建动态的全局主题?

标签 qml

这篇文章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 目前的工作方式是否可能实现类似的功能?

最佳答案

经过一番尝试后,我发现这实际上是可能的,而且做起来相当简单。如果您使用以下代码而不是以前的代码:

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 创建动态的全局主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52388189/

相关文章:

c++ - Qt:从 C++ 向 QML 引擎抛出异常

android - Qt TextField 在 Android 设备上启动时不调用键盘

qt - 如何在一个类中拥有多个 FontLoader 对象?

c++ - 将 QGraphicsScene 嵌入到 QML 中

arm - Qt 应用程序尝试加载平台插件 "xcb"而不是 "eglfs"

Qt Quick QML MouseArea 按下时自动重复

qml - GridLayout 和 Grid 有什么区别

QML 如何动态更改 TextArea 的颜色?

qt - 在QML中forceActiveFocus()vs focus = true

qt - 使 QT/QML TextArea 滚动到底部