QML中可重用的字体属性

Phr*_*ogz 5 qt qml

在QML中,我希望能够为简单的语义重用定义一组字体属性.例如,而不是:

Text {
  text: "This is a header"
  font { family:'Encode Sans'; weight:Font.Black; italic:false; pointSize:24 }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够写:

Text {
  text: "This is a header"
  font: headerFont
}
Run Code Online (Sandbox Code Playgroud)

如何创建一个font我可以分配的单个值?


我知道我做了一个组件,比如:

# Header.qml
Text {
  font { family:'Encode Sans'; weight:Font.Black; italic:false; pointSize:24 }
}

# main.qml
Header { text:"This is a header" }
Run Code Online (Sandbox Code Playgroud)

但是,当我想Labelfont需要a的地方或其他地方使用相同的字体设置时,这不起作用.

我也知道我可以使用这个问题的答案,例如:

// style.js    
.pragma library
var header = {
  family: 'Encode Sans',
  weight: Font.Black, // is this legal?
  italic: false,
  size:   24
};
Run Code Online (Sandbox Code Playgroud)
// main.qml
import "style.js" as Style

Text {
  text: "This is a header"
  font {
    family: Style.header.family
    weight: Style.header.weight
    italic: Style.header.italic
    pointSize: Style.header.size
  }
}
Run Code Online (Sandbox Code Playgroud)

虽然这确实是单一来源的,但如图所示,它是非常冗长的.


我试过这个......

Font {
  id: header
  family: 'Encode Sans'
  weight: Font.Black
  italic: false
  pointSize: 24
}

Text {
  text: "This is a header"
  font: header
}
Run Code Online (Sandbox Code Playgroud)

...但它的错误是"元素不可创造" Font {.

Phr*_*ogz 14

这个答案正是我所需要的.我可以使用Qt.font()方法来创建具有我需要的属性的字体值.包含在具有全局ID的QtObject中,我可以:

### main.qml
QtObject {
    id: theme
    property font headerFont: Qt.font({
        family: 'Encode Sans',
        weight: Font.Black,
        italic: false,
        pointSize: 24
    })
}

### AnyOther.qml
Text {
    text: "This is a header"
    font: theme.headerFont
}
Run Code Online (Sandbox Code Playgroud)