Отладка значений контекста и прикрепленных свойств в (чужом) файле QML

Представьте, что некоторый код QML подвергается воздействию некоторых присоединенных или контекстных свойств.

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

Я хотел бы иметь возможность читать такие свойства (например, index) из-за пределов файла QML — для диагностических целей.

Я ищу способ сделать это без какого-либо изменения рассматриваемого файла QML.

Я могу получить указатели на соответствующие объекты QML и QQmlApplicationEngine в коде С++.

Я пробовал следующее:

  • QML/Javascript DOM-прогулка с данными [], for(in), eval() и т. д. - вероятно, невозможно по дизайну
  • Отладчик QtCreator QML - я нигде не мог найти контекст или прикрепленные свойства
  • GammaRays - похоже, также не отображаются прикрепленные свойства, только некоторые присоединенные и контекстные объекты можно найти путем тщательного поиска в глобальном списке объектов.
  • QQmlEngine и его движок JavaScript — выглядит многообещающе, но слишком сложно разобраться без соответствующих знаний или опыта.
  • Динамическое внедрение QML-кода, свойств и объектов в QObjects через QQmlEngine - оттуда ничего не удалось получить, не уверен, что это вообще возможно
  • Доступ к закрытым членам С++ и т. д. с помощью грязных хаков, таких как friend инъекция - должна быть возможна, но, вероятно, потребуется немного покопаться для каждого класса в каждой отлаживаемой версии qt - предпочел бы более универсальное решение.
  • Просмотр полей C++ qquickrepeater и такое через отладчик C++ - должно быть возможно, но требует установки точки останова в QML и только затем установки точки останова в C++ - крайне неудобно, особенно для разработчиков, не знакомых с внутренностями Qt.

0 ответов

Другие вопросы по тегам