跨多个 QML 文件共享颜色值和其他只读值

Share color values and other read-only values across multiple QML files

例如,我正在寻找一种跨多个 QML 文件共享只读值的简单方法;假设我有一个标签元素:

        Label {
            id: titleLabel
            text: listView.currentItem ? listView.currentItem.text : "IDEAL Networks"
            font.pixelSize: 20
            elide: Label.ElideRight
            horizontalAlignment: Qt.AlignLeft
            verticalAlignment: Qt.AlignVCenter
            Layout.fillWidth: true
            color: red;
            padding: {
                left: 14
            }
        }

colorpadding 值需要在其他 QML 文件和同一文件的其他区域中使用。

除了在多个位置重新键入 red 和 14,有没有一种方法可以创建一个包含这些值的共享库,而不是让以后更容易进行全局更新?

*更新*

我已按照此处的说明进行操作:http://doc.qt.io/qt-5/qtqml-modules-qmldir.html

然而,当我导入自定义 CustomStyles 1.0 模块时出现错误 - 未安装模块 "CustomStyles"。

//Style.qml with custom singleton type definition
pragma Singleton
import QtQuick 2.0

QtObject {
    property int textSize: 20
    property color textColor: "green"
}

// qmldir declaring the singleton type
module CustomStyles
singleton Style 1.0 Style.qml

// singleton type in use
import QtQuick 2.0
import CustomStyles 1.0

Text {
    font.pixelSize: Style.textSize
    color: Style.textColor
    text: "Hello World"
}

解决方案是使用单例,在您的情况下,您必须正确导入它,假设 .qml 在同一个 qrc 中,您只需执行以下操作:

.qrc

<RCC>
    <qresource prefix="/">
        <file>main.qml</file>
        [...]
        <file>style/qmldir</file>
        <file>style/style.qml</file>
    </qresource>
</RCC>

Style.qml

pragma Singleton
import QtQuick 2.0

QtObject {
   readonly  property int padding: 20
   readonly property color textColor: "green"
}

qmldir

singleton Style 1.0 Style.qml

main.qml

import QtQuick 2.0
import "style"

Text {
    font.pixelSize: Style.textSize
    color: Style.textColor
    text: "Hello World"
}

下面link有个例子

如果你的对象树不是太深,可以简单地在 main.qml 的根对象中声明属性,由于动态作用域,这将使它们可以从所有 qml 文件中解析,只要你注意不要用同名的本地属性隐藏它们。

如果你的树很深,使用单例会更有效,这会减少查找时间。

也可以选择更近的树节点,不一定非得是根元素,只要足够深,让所有需要访问它的对象都嵌套在里面,并且属性有在特定 qml 文件的根元素中声明以获得动态范围。