如何创建自定义属性分组并将其应用于不同的控件?

时间:2016-04-23 03:32:15

标签: qt qml qt-creator

我有一个带有按钮,TextFields,Labels等的窗口。这些都有共同的属性,如字体系列,颜色,大小等。我希望能够做的是定义这些属性的分组(称为,说, ,textStyles.MainTitle或textStyles.DescriptiveText等),包括字体系列,大小和重量,高度和颜色。然后在QML文件中我会写一些类似的东西:

myCustomProperty: textStyles.MainTitle

这会将这些值应用于控件。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

通过实施各自的样式来设置QML控件的样式,例如,Button必须实现ButtonStyle

对于实际的“分组”,您只需使用QtObject

即可
property QtObject textStyles : QtObject {
    property FontLoader mainTitle : FontLoader {...}
    ....
}

您还可以将样式化组件扩展为专用类型:

// StyledText.qml

Text {
  font.family: someFont
  font.pixelSize: fontSize
  color: someColor
  font.italic: true
  font.letterSpacing: -1
  ...
}

然后只使用StyledText {}而不是重复设计常规Text元素。

  

我在哪个/哪个文件中放置QtObject片段?我不明白// StyledText.qml是什么,或者FontLoader是什么。

如果您希望它在整个应用程序中可用,您可以将其作为根对象的属性放在main.qml中,这要归功于动态范围textStyles将从您的其他所有文件中解析项目。您也可以将整个组件样式放入其中并在项目中共享。

StyledText.qml只是您添加到项目中的额外qml文件,您只需在现有qml文件中实现其正文,然后右键单击Text并选择重构 - >将组件移动到单独的文件中。

FontLoader只是一个常规QML组件,您可以使用它来加载特定字体并用作文本的字体来源。您不必使用它,您也可以使用系统字体中的字体系列。字体加载器对于与应用程序捆绑在一起的字体非常有用。