Я разрабатываю настольное приложение в 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, чтобы получить некоторую информацию о пользовательском элементе (вид динамического процесса), и поэтому мне нужен корневой объект. Без объекта для запуска сканирования бесполезно продолжать, и мое приложение закрывается.