qt - 尝试通过插入子样式项来设置 Qt QML 项的样式
问题描述
我正在尝试不同的方法来设置 QT 的应用程序 QML 项目的样式。我的目标是:
- 限制主文件中的代码量(隐藏样式文件中的所有样式内容,与样式单例方法不同)
- 不必定义我要使用的每种类型的项目(与自定义组件方法不同)
- 可能能够在单个项目中混合和匹配不同的预定义样式。
也许有一个明确的策略来获得这个,我只是还没有读到它。也许它无论如何都没有任何意义:-)
我一直在玩定义不同组件的想法,一个用于我想要定义的每种样式类型。这个想法是: - 定义一个要修改其父级的组件 - 将该组件插入我想要采用该特定样式的位置
第一种方法依赖于一些 javascript 调用:
MyStyle.qml:
Item {
Component.onCompleted: {
parent.color = "lightblue"
parent.radius = 5
parent.border.width = 3
parent.border.color = "black"
}
}
在我的主要代码中:
Rectangle {
id: testRectangle
anchors.fill: parent
MyStyle {}
}
这给了我想要的结果,但感觉不对:
- 我希望一劳永逸地静态应用样式
- 如果我开始在所有地方使用它,我会不会在创建对象时看到工件,并减慢我的界面?
所以我也试过这个:
MyRectangleStyle.qml:
Item {
property Rectangle styleTarget
styleTarget.color: "lightblue"
styleTarget.radius: 5
styleTarget.border.width: 3
styleTarget.border.color: "black"
}
在我的主要代码中:
Rectangle {
id: testRectangle
anchors.fill: parent
MyStyle {styleTarget: testRectangle}
}
但:
- 好吧,它不起作用:-)(虽然没有警告,qml根本不加载)
- 我又回到了必须定义我将要使用的每一种类型的项目上。
那么,有没有更好的方法来实现我在这里尝试做的事情?谢谢!
解决方案
您的第二种方法不起作用,因为您的组件将属性设置为在创建组件时不一定存在的项目,而是在 styleTarget 更改时设置属性。另一方面,MyStyle 没有必要成为 Item,因为它没有显示,而是使用 QtObject,最后将您的方法更改概括property Item styleTarget
为property Rectangle styleTarget
:
QtObject {
property Item styleTarget
onStyleTargetChanged: {
styleTarget.color = "lightblue"
styleTarget.radius = 5
styleTarget.border.width = 3
styleTarget.border.color= "black"
}
}
推荐阅读
- r - 使用 ggplot 创建具有专业外观的图形
- java - 一次播放多个声音 JavaFx
- javascript - React-js 无法识别 AmbientLightSensor
- r - 图中缺少后验分布
- c# - WPF Combobox如何填充列表
- javascript - 将具有功能的 JS 动画嵌入到另一个 HTML5 页面
- java - Server Tomcat v9.0 Server at localhost 无法在 eclipse 中启动
- python - 如何解析下载的 HTML 文件并创建列表
- c - 缓冲区溢出,修改后的 Seedlab 问题?
- kotlin - 为什么 @Transient 不能与 val 字段一起使用?