cma*_*t85 5 javascript c++ qt qml
我有一个QObject财产声明为:
Q_PROPERTY( QList< int > keys READ getKeys NOTIFY keysChanged )\nRun Code Online (Sandbox Code Playgroud)\n\n在文档中指出:
\n\n\n\n\nQML 中以 JavaScript 数组类型的形式透明地支持某些 C++ 序列类型。
\n\n特别是,QML 目前支持:
\n\n\n
\n\n- QList<int>
\n...
\n
但是,当我使用此属性来驱动Repeater模型时:
QtObject {\n id: d_\n property var keys: base.proxy.keys // A binding to the C++ keys property\n onKeysChanged: {\n ...\n }\n}\n\nColumn {\n spacing: 4\n\n Repeater {\n id: repeater\n model: d_.keys\n delegate: Rectangle {\n height: 24\n width: 24\n color: "red"\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n该Repeater模型不产生代表。如果我查询 的长度d_.keys,它会显示正确的数量,如果我从 C++ 更改属性,d_.onKeyChanged:{}则会触发 \xe2\x80\x94 但Repeater永远不会构建任何内容。
如果我将 QMLkeys属性更改为 JS 数组:
property var keys: [1,2,3]\nRun Code Online (Sandbox Code Playgroud)\n\n效果Repeater如预期。如果我使用 C++ 属性,但手动将数据转换为 JS 数组,它也会按预期工作:
QtObject {\n id: d_\n property var keys: base.proxy.keys\n\n onKeysChanged: {\n var list = [];\n for ( var i = 0; i < keys.length; ++i ) {\n list.push( keys[i] );\n }\n repeater.model = list;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这强烈表明,不管文档怎么说,QList<int>它并不 等同于 JS 数组。我做错了什么,还是这是一个错误?
| 归档时间: |
|
| 查看次数: |
2052 次 |
| 最近记录: |