【问题标题】:Adding custom properties to QML type向 QML 类型添加自定义属性
【发布时间】:2016-01-28 12:28:09
【问题描述】:

我对 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()
}

这会返回一个错误:

ReferenceError: startYear 未定义

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

【问题讨论】:

    标签: qt qml qtquick2


    【解决方案1】:

    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()
    }
    

    【讨论】:

    • 谢谢!这确实是问题所在!
    【解决方案2】:

    尝试在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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 2020-11-23
      • 2023-03-13
      • 2015-03-09
      • 2018-08-06
      • 1970-01-01
      相关资源
      最近更新 更多