C++ 如何在QML中实现不同平台的调色板类型
因此,目前我有3种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&
主题使用.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添加一些属性。我猜这种复制粘贴不是很好的做法