Как разобрать QML с отсутствующими модулями - PullRequest
0 голосов
/ 08 января 2020

Я хотел бы проанализировать файл QML, найденный внутри существующего приложения, и изменить некоторые его свойства. Однако всякий раз, когда я пытаюсь загрузить компонент, я получаю сообщение об ошибке, говорящее, что компонент не может быть загружен. Вероятно, это связано с тем, что мне не хватает некоторых импортированных модулей QML.

У меня такой вопрос: возможно ли проанализировать файл QML из c ++ в QT, если у меня нет доступа ко всем импортированным модулям? ? Кажется, это должно быть довольно просто, все, что я хочу сделать, это программно перевернуть несколько логических значений и изменить некоторые числа.

Я уверен, что я мог бы просто выполнить поиск и замену в стиле регулярных выражений, но это ' было бы намного лучше, если бы я мог разобрать существующую структуру объектов файлов.

Вот что я попробовал (я не делаю все нижеприведенное ниже, это просто разные подходы, которые я проверял):

QString urlString = "/path/to/file.qml";
QUrl url = QUrl::fromLocalFile(urlString);

QFile file(urlString);
if(!file.exists()){
  qDebug << "Can't find file" << endl;
}

// Try using qqmlengine
QQmlEngine engine;
QQmlComponent component(&engine, url);
QObject *object = component.create(); // Error: QQmlComponent: Component is not ready

// Try using qquickview
QQuickView view;
view.setSource(url); // generates lots of: module "MyCustomModule" is not installed

// Try using qqmlApplicationEngine
QQmlApplicationEngine appEngine;
engine.load(url); // generates lots of: module "MyCustomModule" is not installed

Эти подходы работают, когда Я тестирую с помощью простого файла qml. Я попробовал это, и мне удалось получить доступ и изменить свойства.

import QtQuick 2.0

Item {
    width: 100
    height: 62
}
...