QQmlApplication не загружается в выпуске

Я разрабатываю настольное приложение в QtQuick/C++ для Windows 10. В функции main() я создаю QQmlApplicationEngine, устанавливаю для него некоторые другие классы в качестве свойства контекста и, наконец, загружаю свой файл qml.

Все пошло хорошо с недавнего времени, когда я понял, что когда я запускаю приложение в «развернутой» версии, этот движок не загружает rootObjects.

Однако приложение запускается с корневым объектом при запуске в QtCreator, как в режиме отладки, так и в режиме выпуска.

Я записываю некоторую информацию в отдельный файл, и оказывается, что загруженный URL-адрес действителен, только нет rootObject, а он мне нужен. Я прочитал в документе, что load() должен ждать, пока сигнал objectCreated будет готов для удаленных URL-адресов, но мой файл qml является локальным, в файле ресурсов. Кстати, поскольку load() стоит в функции main(), я не вижу, как связать objectCreated() с слот, и где найти слот

int main(int argc, char *argv[])
{
  QGuiApplication app(argc, argv);
  QQmlApplicationEngine engine;
  Backend B;
  engine.rootContext()->setContextProperty("backend", B);
  ...
  QUrl Url = QUrl(QStringLiteral("qrc:/qml/main.qml"));
  engine.load(Url);
  if (engine.rootObjects().isEmpty())
  {
    //end up here, only when launching executable stand alone!
    return -1;
  }
  return app.exec();

Это работало нормально, и я не вижу, какие модификации в моем коде прерывают процесс для автономного приложения.

Позже в процессе запуска я сканирую элементы qml файла main.qml, чтобы получить некоторую информацию о пользовательском элементе (вид динамического процесса), и поэтому мне нужен корневой объект. Без объекта для запуска сканирования бесполезно продолжать, и мое приложение закрывается.


person claude joliat    schedule 07.08.2019    source источник


Ответы (1)