向 QML 类型添加自定义属性

Adding custom properties to QML type

我是 QML 的新手,对 C++ 相当熟悉。我一直在尝试通过一些 QML 示例来尝试学习它。

我在玩 TumblerColumn 控件(来自示例),基本上是尝试设置模型来设置年份。它是这样的:

TumblerColumn {
    id: yearColumn
    width: characterMetrics.width * 4 + tumbler.delegateTextMargins

    model: ListModel {
        Component.onCompleted: {
            for (var i = 2000; i < 2100; ++i) {
                append({value: i.toString()});
            }
        }
    }
    onCurrentIndexChanged: tumblerDayColumn.updateModel()
}

现在,我做了如下更改:

TumblerColumn {
    id: yearColumn
    width: characterMetrics.width * 4 + tumbler.delegateTextMargins

    property int startYear: 2000
    property int endYear: 3000

    model: ListModel {
        Component.onCompleted: {
            for (var i = startYear; i < endYear; ++i) {
                append({value: i.toString()});
            }
        }
    }
    onCurrentIndexChanged: tumblerDayColumn.updateModel()
}

这returns一个错误:

ReferenceError: startYear is not defined

如何为这样的 QML 元素定义这些只读常量属性。

尝试在 QML 中创建新的 QtObject 并添加 getter 和 setter

Item {
    QtObject {
        id : readOnlyProperties
        property int startYear : 2000
        property int endYear : 3000
    }

    function getStartYear() {return readOnlyProperties.startYear ;}
    function settartYear (_startYear ) { readOnlyProperties.startYear = _startYear; }

    // the same getter and setter for endYear
}

startYearendYear 不在该范围内。试试这个

TumblerColumn {
    id: yearColumn
    width: characterMetrics.width * 4 + tumbler.delegateTextMargins

    property int startYear: 2000
    property int endYear: 3000

    model: ListModel {
        Component.onCompleted: {
            for (var i = yearColumn.startYear; i < yearColumn.endYear; ++i) {
                append({value: i.toString()});
            }
        }
    }
    onCurrentIndexChanged: tumblerDayColumn.updateModel()
}