我正在 Windows 10 上使用 QtQuick/C++ 开发桌面应用程序。在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();
这运行良好,我看不出我的代码中的哪些修改破坏了独立应用程序的过程。
稍后在启动过程中,我扫描 main.qml 的qml项以检索一些自定义项的信息(一种动态过程),因此我需要一个根对象。没有对象开始扫描,没有用继续,我的应用程序正在关闭。