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

问题描述 投票:1回答:2

例如,我正在寻找一种在多个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"
}
qt qml qt5 qtquick2 qt-quick
2个回答
5
投票

解决方案是使用单例,在这种情况下,您必须正确导入它,并假设.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中有一个示例


1
投票

如果您的对象树不太深,可以简单地在main.qml的根对象中声明属性,这要归功于动态作用域,这使得它们可以从所有qml文件中解析,只要您注意不要用相同名称的本地属性遮盖它们。

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

您还可以选择一个更接近的树节点,它不必是根元素,它必须足够深,以便所有需要访问它的对象都嵌套在其中,并且必须声明属性在特定qml文件的根元素中,以获得动态范围。

© www.soinside.com 2019 - 2024. All rights reserved.