问题标签 [qqmlcontext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
model - 带有模型和委托的自定义视图都可以从两个 QML 文件中访问
虽然我已经想通了,但还是花了很长时间。如果您知道一个不那么复杂的解决方案 - 请分享。
我想提供一个View
适用于任何类型model
(带有任意命名的字段)的自定义:
model: 3
model: [ "red", "yellow", "green" ]
model: [ {color: "red"}, {color: "yellow"}, {color: "green"} ]
model: ListModel{ ListElement{color: "red"}; ListElement{color: "green"} }
- 子类
QAbstractItemModel
等...
为此,我决定property Component delegate
为该用户提供一个视觉效果,该视觉效果Item
将插入到我的View
.
但是,View
还需要从中访问一些信息,delegate
否则它会促进不必要的代码重复或代理的不必要的复杂性model
。
...其中 MyView 应该是这样的:
这样做似乎很容易,但幼稚的尝试并没有奏效。作为答案发布的解决方案对我有用。
qml - 在(外部)QML 文件中调试上下文和附加属性的值
想象一些 QML 代码暴露给一些附加或上下文属性
我希望能够index
从 QML 文件外部读取此类属性(例如 ) - 用于诊断目的。
我正在寻找一种方法来做到这一点,而无需以任何方式修改有问题的 QML 文件。
我能够获得指向相关 QML 对象和QQmlApplicationEngine
C++ 代码的指针。
我尝试了以下方法:
- QML/Javascript DOM-walking with data[], for(in), eval() 等等——设计上可能是不可能的
- QtCreator QML 调试器 - 我在任何地方都找不到上下文或附加属性
- GammaRays - 似乎也没有显示附加属性,只能通过苦苦搜索全局对象列表找到一些附加和上下文对象
- QQmlEngine 和它的 JavaScript 引擎 - 看起来很有希望,但如果没有相关知识或经验就很难理解
- 通过 QQmlEngine 将 QML 代码、属性和对象动态注入 QObjects - 无法从那里访问任何内容,完全不确定是否可能
qquickrepeater
通过诸如注入等肮脏的黑客攻击访问 C++ 私有成员等friend
- 应该是可能的,但可能需要对正在调试的每个 qt 版本中的每个类进行大量挖掘 - 会更喜欢更通用的解决方案。- 通过 C++ 调试器查看 C++ 字段
qquickrepeater
等 - 应该是可能的,但需要在 QML 中设置断点,然后才在 C++ 中设置断点 - 非常不舒服,尤其是对于不熟悉 Qt 内部结构的开发人员。