qt代码设置样式
Posted RedWetPlace
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt代码设置样式相关的知识,希望对你有一定的参考价值。
ui->btn2->setStyleSheet("QPushButton\\ background:#EE6AA7;\\ border:1px solid #8B7E66;\\ border-radius:5px;\\ color:white;\\ \\ QPushButton:hover\\ background:#FF6EB4;\\ \\ QPushButton:hover:pressed\\ background:#CD6090; \\ ");
尝试通过插入子样式项来设置 Qt QML 项的样式
【中文标题】尝试通过插入子样式项来设置 Qt QML 项的样式【英文标题】:Trying to style Qt QML items by inserting child styling item 【发布时间】:2019-08-06 22:05:07 【问题描述】:我正在尝试不同的方法来设置 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 根本无法加载) 我又回到了必须定义我要使用的每一种类型的项目。那么,有没有更好的方法来实现我在这里尝试做的事情?谢谢!
【问题讨论】:
我认为这样做会有些困难。例如,如何将事物设置为突出显示的按钮? 【参考方案1】:您的第二种方法不起作用,因为您的组件将属性设置为在创建组件时不一定存在的项目,而是在 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"
【讨论】:
感谢您的回答,它确实有效。但是这第二种方法比第一种更好吗?当不同的项目被创建并首次显示时,我是否会看到工件(我会看到与受影响的属性有关的“故障”),还是甚至在目标项目首次显示之前发生这种情况?您是否知道其他更适合设置 QML 应用程序样式的方法?谢谢。 @Will59 我不认为它会产生问题,所有项目的绘画都是同时完成的,而且它已经过优化,所以应该没有问题。或者您是否可以在瞬间看到数百万个项目?如果您没有它,那么您想要的优化称为微优化,它根本没有帮助,相反它是浪费时间。阅读softwareengineering.stackexchange.com/questions/99445/… @Will59 与第一种方法不同的是,你的 Style 可以应用到另一个 Item 上(显然会移除初始 Item 的样式)。以上是关于qt代码设置样式的主要内容,如果未能解决你的问题,请参考以下文章