【发布时间】:2019-08-04 10:39:18
【问题描述】:
是否有人能够在使用ApplicationWindow 时热重载所有 QML 文件?我发现了一些例子,如https://qml.guide/live-reloading-hot-reloading-qml/ 和https://www.slideshare.net/ICSinc/how-best-to-realize-a-runtime-reload-of-qml,但大多数情况下他们使用Loader,因为ApplicationWindow 需要作为根项,这不起作用(没有出现窗口)只是重新加载所有 QML 内容。
我试过了:
ApplicationWindow {
id: window
visibility: "FullScreen"
Shortcut {
sequence: "F5"
context: Qt.ApplicationShortcut
onActivated: {
window.close();
app.loadQml();
}
}
...
}
app 是我在 C++ 端设置的上下文属性,而函数确实如此:
void App::loadQml()
{
qml_engine_.clearComponentCache();
// Use "qrc:/Main.qml" for Qt Resource System.
// Use "Main.qml" for file system.
qml_engine_.load(QUrl(QStringLiteral("Main.qml")));
}
这种代码工作一次,窗口消失并重新出现,但快捷方式只工作一次,但没有第二次......
有什么想法可以实现吗?
【问题讨论】:
-
你能分享一个完整的最小例子吗?找出问题会更容易。我很惊讶它第一次工作,你正在关闭
Shortcut的父级
标签: qt qml reload hot-reload applicationwindow