在 Qt QML 中为许多文本元素指定字体

新手上路,请多包涵

我有一个通过 QML 文件指定的小部件。此小部件包含顶级 Rectangle 包含两个 Columns 。这些 Columns 中的每一个都包含许多 Text 元素。这个 QML 小部件包装在 C++ 中 QDeclarativeView 的子类中。

我想为这些 Text 元素中的每一个指定字体。今天我通过指定顶级属性来做到这一点:

 property string fontfamily: "Arial"
property bool fontbold: false
property bool fontitalic: false
property int fontpixelsize: 11
property string fontcolor: "White"

并将每个 Text 元素绑定到这些属性:

 Text
{
    color: fontcolor
    font.family: fontfamily
    font.bold: fontbold
    font.italic: fontitalic
    font.pixelSize: fontpixelsize
    ...
}

这不是很优雅,每次我需要支持新的东西(例如带下划线的字体)时都需要添加新的字段。我无法声明 font 类型的属性并改为绑定到此属性(小部件为空白,qmlviewer 警告“属性后的预期类型”)。

有没有更好的方法来为所有 Text 元素指定字体?

笔记!我正在手写 QML 文件。

原文由 larsmoa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

另一种可能性是编写一个新的 QML 组件,它继承自 Text 默认设置一些属性:

StyledText.qml

 import QtQuick 1.0

Text {
    // set default values
    color: "blue"
    font.family: "Arial"
    font.bold: true
    font.italic: true
    font.pixelSize: 12
}

main.qml

 import QtQuick 1.0

Rectangle {
    Row {
        spacing: 10

        Column {
            StyledText {
                text: "Foo1"
            }
            StyledText {
                text: "Bar1"
            }
            StyledText {
                text: "Baz1"
            }
        }

        Column {
            StyledText {
                text: "Foo2"
            }
            StyledText {
                text: "Bar2"
            }
            StyledText {
                text: "Baz2"
            }
        }
    }
}

原文由 hiddenbit 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 Qt 5.6(至少,可能更早)中,您可以使用 Qt.font() 动态分配字体对象并在其他地方引用它。所以,这有效:

 property font myFont: Qt.font({
    family: fontfamily,
    bold: fontbold,
    italic: fontitalic,
    pixelSize: fontpixelsize
});

Text
{
    color: fontcolor
    font: parent.myFont
}

关于 Qt.font() 的更多信息: https ://doc.qt.io/qt-5/qml-qtqml-qt.html#font-method

原文由 David K. Hess 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题