【问题标题】:How to declare list property in QML如何在 QML 中声明列表属性
【发布时间】:2014-12-31 05:12:44
【问题描述】:

如何在 QML 中声明一个列表属性(在我的情况下与 Qt.labs.settings 一起使用):

Settings {
    property list recentFiles: []
}

不起作用。我尝试了许多其他选项:list<string>string[] 等。似乎都不起作用。

【问题讨论】:

标签: qt qml qt5 qtquick2


【解决方案1】:
Settings {
    property var recentFiles: []
}

http://doc.qt.io/qt-5/qml-var.html

【讨论】:

  • 它有效,谢谢。关键字list比有什么用?
【解决方案2】:

列表只能存储 QML 对象,不能包含任何基本类型 价值观

string 是基本类型,不能存储在列表中。 为此,您最好使用property var recentFiles

【讨论】:

    【解决方案3】:

    由于您询问的是列表属性('list' 关键字),因此以下语法似乎有效:

    property list<Rectangle> rectList: [
        Rectangle { id: a; },
        Rectangle { id: b; }
    ]
    
    Rectangle { id: c }
    
    Component.onCompleted: {
        console.log("length: " + rectList.length)
        rectList.push(c)
        console.log("length: " + rectList.length)
    }
    

    这将打印出来

    qml: length: 2
    qml: length: 3
    

    但我看到 'rectList' 也会接受以下内容:

    MouseArea { id: mArea; }
    ..
    rectList.push(mArea)
    

    这没有意义。并且命令建议/自动完成不适用于 Qt Creator 中的这种语法。我想这是某种遗留语法,不应该在新应用程序中使用。您应该改用其他答案的建议:

    属性 var myList: []

    那么你会得到 Qt Creator 更好的支持。

    'list' 的文档说 [1]:

    “列表只能存储 QML 对象,不能包含任何基本类型值。(要在列表中存储基本类型,请改用 var 类型。)”

    所以下面的代码不会编译:

    property list<int> intList: []
    

    同样的文档也说:

    “注意:不建议将列表类型用作自定义属性的类型。为此应使用 var 类型,因为 var 类型存储的列表可以在 QML 中更灵活地进行操作。”

    [1]https://doc.qt.io/qt-5/qml-list.html

    【讨论】:

      【解决方案4】:

      list 目前只接受对象类型。 int 是一个值类型。 list 应该在可能的情况下优先于 var,因为它是类型化的。

      【讨论】:

        猜你喜欢
        • 2013-02-21
        • 1970-01-01
        • 1970-01-01
        • 2014-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        相关资源
        最近更新 更多