对于我的QML文件,我有一个类似这样的目录结构:
qml.qrc
main.qml
LockScreen/
LockScreen.qml
QuickMenu/
QuickMenu.qml
misc/
KeyboardInput.qml(我还排除了其他文件,但这与此无关)
我已将上述所有文件添加到我的qrc文件中,并为每个目录加上前缀:
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>qtquickcontrols2.conf</file>
<file>MessagePopup.qml</file>
<file>MessagePopupForm.ui.qml</file>
</qresource>
<qresource prefix="/LockScreen">
<file>LockScreen/LockScreen.qml</file>
<file>LockScreen/fingerprint.png</file>
<file>LockScreen/fingerprint_highlighted.png</file>
</qresource>
<qresource prefix="/MainPages">
<file>MainPages/LibraryPage.qml</file>
<file>MainPages/CameraPage.qml</file>
<file>MainPages/MessagesPage.qml</file>
<file>MainPages/HomePage.qml</file>
<file>MainPages/saturn.jpg</file>
</qresource>
<qresource prefix="/QuickMenu">
<file>QuickMenu/QuickMenu.qml</file>
</qresource>
<qresource prefix="/misc">
<file>misc/KeyboardInput.qml</file>
</qresource>
</RCC>我的问题是,当我像这样导入每个前缀时
import "misc"
import "MainPages"
import "QuickMenu"
import "LockScreen"在我的main.qml中,我收到一个错误,其中一个QML对象不是类型。
QQmlApplicationEngine failed to load component
qrc:/main.qml:67 LockScreen is not a type奇怪的是,我可以使用QtCreator的intellisense访问我的所有对象,在构建和运行应用程序之前,一切似乎都很好地导入。有没有办法证明qrc路径已经过时了?还是旧的缓存文件?
发布于 2018-12-15 01:18:23
这个问题是由前缀引起的,该前缀似乎在路径中添加了一个级别,因此在您的示例中,导入应该是:
import "./LockScreen/LockScreen"尽管编辑器丢失了自动完成并抛出警告。因此,问题似乎在于在解释qresource别名时遇到问题的编辑器。
更好的选择是为.qml文件使用别名:
...
<qresource prefix="/LockScreen">
<file alias="LockScreen.qml">LockScreen/LockScreen.qml</file>
...main.qml
import "LockScreen"
LockScreen{
// ...
}注意:别名必须有一个.qml扩展,否则correctly将无法正确识别
https://stackoverflow.com/questions/53788562
复制相似问题