0

想象一些 QML 代码暴露给一些附加或上下文属性

Repeater {
    model: 1
    delegate: Text { text: index } //<--- index only visible inside delegate
}

我希望能够index从 QML 文件外部读取此类属性(例如 ) - 用于诊断目的。

我正在寻找一种方法来做到这一点,而无需以任何方式修改有问题的 QML 文件。

我能够获得指向相关 QML 对象和QQmlApplicationEngineC++ 代码的指针。

我尝试了以下方法:

  • 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 内部结构的开发人员。
4

0 回答 0