从本地文件系统加载 qml component/file
Load qml component/file from local file system
我的应用程序具有以下结构:
有一个 main.cpp 从 qrc 文件加载名为 main.qml 的文件。
qrc 内容:
- /qml/main.qml
- /qml/CustomUiElement.qml
- /qml/WidgetQmlInQrc.qml
在这个 main.qml 中,我正在加载其他 qml components/files,它们也存储在 qrc 中。这按预期工作。
main.qml
Component.onCompleted:{
var component=Qt.createComponent("WidgetQmlInQrc.qml")
widget=component.createObject(mainWindow,params)
}
我想在 main.qml.
中使用存储在本地文件系统中的 qml components/files
本地 qml 文件:/mnt/plugin/WidgetQmlExternal.qml
import QtQuick 2.0;
Rectangle {
color:"green";
CustomUiElement {
}
}
首先我尝试扩展 qml 导入路径:
viewer->engine()->addImportPath("/mnt/plugin/");
这没有用。
之后我尝试使用完整路径加载组件。
现在找到并加载了 WidgetQmlExternal.qml,但是找不到 CustomUiElement.qml,因为外部 qml 无法访问 qrc 中的文件。
Component.onCompleted:{
var component=Qt.createComponent("/mnt/plugin/WidgetQmlExternal.qml")
widget=component.createObject(mainWindow,params)
}
我该如何解决这个问题/我必须更改我的应用程序的结构才能加载外部组件,从而再次重用我的一些自定义组件?
以下是我想到的一些选项:
使用加载程序加载基于 QRC 的内部 QML 文件
WidgetQmlExternal.qml:
import QtQuick 2.0
Rectangle {
anchors.fill: parent
color: "red"
Loader {
source: "qrc:/WidgetQmlInQrc.qml"
}
}
有趣的是,Qt 本身就是这样公开的 certain assets。
将基于 QRC 的内部 QML 文件公开为 QML 模块
您可以阅读更多相关信息 here。
我也为此苦苦挣扎,直到我意识到您可以简单地为 url 添加前缀以强制它查看本地文件系统,例如
Loader {
source: "file:/mnt/plugin/WidgetQmlExternal.qml"
}
使用这种方法,加载程序加载的组件也将能够通过 QRC 访问其他组件。希望对您有所帮助。
我的应用程序具有以下结构:
有一个 main.cpp 从 qrc 文件加载名为 main.qml 的文件。
qrc 内容:
- /qml/main.qml
- /qml/CustomUiElement.qml
- /qml/WidgetQmlInQrc.qml
在这个 main.qml 中,我正在加载其他 qml components/files,它们也存储在 qrc 中。这按预期工作。
main.qml
Component.onCompleted:{
var component=Qt.createComponent("WidgetQmlInQrc.qml")
widget=component.createObject(mainWindow,params)
}
我想在 main.qml.
中使用存储在本地文件系统中的 qml components/files本地 qml 文件:/mnt/plugin/WidgetQmlExternal.qml
import QtQuick 2.0;
Rectangle {
color:"green";
CustomUiElement {
}
}
首先我尝试扩展 qml 导入路径:
viewer->engine()->addImportPath("/mnt/plugin/");
这没有用。
之后我尝试使用完整路径加载组件。 现在找到并加载了 WidgetQmlExternal.qml,但是找不到 CustomUiElement.qml,因为外部 qml 无法访问 qrc 中的文件。
Component.onCompleted:{
var component=Qt.createComponent("/mnt/plugin/WidgetQmlExternal.qml")
widget=component.createObject(mainWindow,params)
}
我该如何解决这个问题/我必须更改我的应用程序的结构才能加载外部组件,从而再次重用我的一些自定义组件?
以下是我想到的一些选项:
使用加载程序加载基于 QRC 的内部 QML 文件
WidgetQmlExternal.qml:
import QtQuick 2.0
Rectangle {
anchors.fill: parent
color: "red"
Loader {
source: "qrc:/WidgetQmlInQrc.qml"
}
}
有趣的是,Qt 本身就是这样公开的 certain assets。
将基于 QRC 的内部 QML 文件公开为 QML 模块
您可以阅读更多相关信息 here。
我也为此苦苦挣扎,直到我意识到您可以简单地为 url 添加前缀以强制它查看本地文件系统,例如
Loader {
source: "file:/mnt/plugin/WidgetQmlExternal.qml"
}
使用这种方法,加载程序加载的组件也将能够通过 QRC 访问其他组件。希望对您有所帮助。