Отладка значений контекста и прикрепленных свойств в (чужом) файле 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.