C++ 如何在QML中实现不同平台的调色板类型

C++ 如何在QML中实现不同平台的调色板类型,c++,qt,qml,C++,Qt,Qml,因此,目前我有3种Qml类型: 主题使用.qml QtObject { property Palette palette: Palette {} Component.onCompleted: { if (themeContext) { palette = themeContext.palette } } } QtObject { property color WindowsColor: "red&

因此,目前我有3种Qml类型:
主题使用.qml

QtObject {
    property Palette palette: Palette {}
    Component.onCompleted: {
        if (themeContext) {
            palette = themeContext.palette
        }
    }
}
QtObject {
    property color WindowsColor: "red"
}
QtObject {
    property Palette palette: BaseTheme.Palette {}
}
Palette {
    WindowsColor: "green" // can reimplement existing colors
    property color NewColor: "black" // and add some more colors
}
调色板.qml

QtObject {
    property Palette palette: Palette {}
    Component.onCompleted: {
        if (themeContext) {
            palette = themeContext.palette
        }
    }
}
QtObject {
    property color WindowsColor: "red"
}
QtObject {
    property Palette palette: BaseTheme.Palette {}
}
Palette {
    WindowsColor: "green" // can reimplement existing colors
    property color NewColor: "black" // and add some more colors
}
BaseTheme.qml

QtObject {
    property Palette palette: Palette {}
    Component.onCompleted: {
        if (themeContext) {
            palette = themeContext.palette
        }
    }
}
QtObject {
    property color WindowsColor: "red"
}
QtObject {
    property Palette palette: BaseTheme.Palette {}
}
Palette {
    WindowsColor: "green" // can reimplement existing colors
    property color NewColor: "black" // and add some more colors
}
BaseTheme.palete.qml

QtObject {
    property Palette palette: Palette {}
    Component.onCompleted: {
        if (themeContext) {
            palette = themeContext.palette
        }
    }
}
QtObject {
    property color WindowsColor: "red"
}
QtObject {
    property Palette palette: BaseTheme.Palette {}
}
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"
    }
}
此外,我还将主题设置为主要用途:

QQmlComponent qmlComponent(&engine, "path to AndroidTheme");
auto createdComponent = qmlComponent.create(context);
context->setContextProperty("themeContext", createdComponent);
在某个地方,我听说这不是制作调色板的最佳方法,调色板只包含不同平台所需的颜色

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

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

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

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

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


如果你使用的是<代码> QQmlApplicationEngine < /C>,那么你甚至不需要在C++中做任何更改。已经为您创建了

QQmlFileSelector

使用并创建适当的实例获取平台是的,但通过这种方式,我必须在两个文件中实现相同的属性,并向android添加一些属性。我猜这种复制粘贴不是很好的做法