简单的预览工具.
发布程序时最好链接上所有 Qml module, 以 Windows 为例:
windeployqt D:\QtRepository\qmlliveloader\win-deploy -qmldir D:\Qt\5.15.0\mingw81_64\qml
注意: 导入的 qml 文件根组件必须是 Window
或 ApplicationWindow
, 并且所有 qml 文件都位于主 qml 文件所在的文件夹及其子文件夹中.
Qml live loader 一个很大的问题是只能预览纯 QML 文档, 不支持第三方项目中的 C++ 接口. 目前我的解决方案是将其修改后编译到第三方项目中, 需要做的修改如下:
- 将下列文件导入项目
qmlliveengine.h
qmlliveengine.cpp
live.qml
- 修改 main.cpp
Qt Creator 默认生成的 main.cpp 内容为
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
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();
}
QmlLiveEngine
继承自 QQmlApplicationEngine
, 因此可以直接将 QQmlApplicationEngine
替换为 QmlLiveEngine
.
要使用 Live, 需要启用 hot load, 并且必须用绝对路径而不是 qrc 链接:
#include <QGuiApplication>
#include "qmlliveengine.h"
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QmlLiveEngine engine;
engine.hotLoad("/path/to/main.qml");
return app.exec();
}
这里假定所有 qml 文件都在主 qml 文件所在的文件夹及其子文件夹中, 并且 live.qml 和主 qml 文件处于同级文件夹中.
另外, 由于 Qt Creator 自带的输出窗口显示效果不好, Live engine 默认将 console message 重定向至 live 窗口. 要使用自带的输出窗口, 只需要改为:
engine.hotLoad("/path/to/main.qml", false);