想象一些 QML 代码暴露给一些附加或上下文属性
Repeater {
model: 1
delegate: Text { text: index } //<--- index only visible inside delegate
}
我希望能够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 内部结构的开发人员。