首页 > 解决方案 > 尝试通过插入子样式项来设置 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}
    }

但:

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

标签: qtqmlqt5

解决方案


您的第二种方法不起作用,因为您的组件将属性设置为在创建组件时不一定存在的项目,而是在 styleTarget 更改时设置属性。另一方面,MyStyle 没有必要成为 Item,因为它没有显示,而是使用 QtObject,最后将您的方法更改概括property Item styleTargetproperty Rectangle styleTarget

QtObject {
    property Item styleTarget
    onStyleTargetChanged: {
        styleTarget.color = "lightblue"
        styleTarget.radius = 5
        styleTarget.border.width = 3
        styleTarget.border.color= "black"
    }
}

推荐阅读