将QML应用程序与C++应用程序集成



有什么方法可以将QML应用程序与C++集成在一起吗?


我有什么

我有一个用C++ui文件制作的应用程序,它应该是主应用程序,还有一个应用程序,其中只有QML中制作的一些屏幕和视图。


问题

有什么方法可以让我在QML中写入页面并在C++应用程序中访问它们吗?我之所以问这个问题,是因为我已经看到,实际上主要的是完全不同的。

C++主:

QApplication a(argc, argv);
MainWindow w(&a);
w.show();
return a.exec();

QML主:

QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
qmlRegisterType<MovieListModel>("MovieListModel", 1, 0, "MovieListModel");
qmlRegisterType<MovieModel>("MovieModel", 1, 0, "MovieModel");

QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();

问题

我如何组合这两个应用程序,或者甚至可以组合它们,如果在我的应用程序中,我将单击一个按钮从UI文件(或直接从C++代码生成(进入页面,如果我将单击另一个按钮进入QML页面?

如果你们中的任何人知道我该怎么做,请告诉我,因为我在谷歌上能找到的一切都是如何将QML文件作为ui,并使用一些C++作为特定ui的后端。但没有关于如何在UI方面将两者结合的内容。

过了一段时间我自己找到了答案。

有一个特殊的QQuickWidget,专门用于这个目的。

QQuickWidget *view = new QQuickWidget;
view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));
view->show();

最新更新