0

所以目前我有 3 种 Qml 类型:
ThemeToUse.qml

QtObject {
    property Palette palette: Palette {}
    Component.onCompleted: {
        if (themeContext) {
            palette = themeContext.palette
        }
    }
}

调色板.qml

QtObject {
    property color WindowsColor: "red"
}

BaseTheme.qml

QtObject {
    property Palette palette: BaseTheme.Palette {}
}

BaseTheme.Palette.qml

Palette {
    WindowsColor: "green" // can reimplement existing colors
    property color NewColor: "black" // and add some more colors
}

我有一个 Android 应用程序的 Theme.qml:

BaseTheme {
    palette: BaseTheme.Palette {
        NewColor: "blue"
        readonly property color androidColor: "#010101"
    }
}

此外,我主要制作 ThemeToUse:

QQmlComponent qmlComponent(&engine, "path to AndroidTheme");
auto createdComponent = qmlComponent.create(context);
context->setContextProperty("themeContext", createdComponent);

在某处我听说这不是制作仅包含不同平台所需颜色的调色板的最佳方法。

所以问题是:是否有任何方法可以为不同的平台制作不同的调色板,以便我可以以这种形式访问它们的属性:Palette.SomeColor(不是 WinPalette.SomeColor 和 AndroidPalette.SomeColor)

顺便说一句。我很抱歉我的英语

4

1 回答 1

1

我建议使用QQmlFileSelector。它将允许您根据平台或您选择的任何其他选择器字符串添加任何 qml 文件的不同版本。

假设我有一个名为MyTheme.qml. 比方说,如果我在 Windows 和 Android 上运行,我希望该文件看起来不同。我的目录结构看起来像这样:

qml/
    MyTheme.qml
    +android/
         MyTheme.qml

在这种情况下,Windows 版本将是默认版本,因为我没有为其指定特殊路径。但是如果 Qt 检测到我在 Android 平台上运行,每当我请求一个 qml 文件时,Qt 都会首先在+android路径中查找它。

如果您使用的是QQmlApplicationEngine,那么您甚至不需要在 C++ 中进行任何更改。QQmlFileSelector已经为您创建好了。

于 2021-03-09T14:37:04.577 回答