【问题标题】:Trying to style Qt QML items by inserting child styling item尝试通过插入子样式项来设置 Qt QML 项的样式
【发布时间】: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 根本无法加载)
  • 我又回到了必须定义我要使用的每一种类型的项目。

那么,有没有更好的方法来实现我在这里尝试做的事情?谢谢!

【问题讨论】:

  • 我认为这样做会有些困难。例如,如何将事物设置为突出显示的按钮?

标签: qt qml qt5


【解决方案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 的样式)。
猜你喜欢
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 2015-01-21
  • 2018-03-11
  • 2011-01-27
  • 2014-07-16
  • 2015-08-30
  • 2019-07-14
相关资源
最近更新 更多