Qt QML包含来自不同目录的问题

  • 本文关键字:问题 QML 包含 Qt qt qml qt5
  • 更新时间 :
  • 英文 :


我的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路径是否过时?还是旧的缓存文件?

问题是由似乎在路径中添加级别的前缀引起的,因此在您的情况下,导入应该是:

import "./LockScreen/LockScreen"

尽管编辑器会丢失自动完成并抛出警告。因此,问题似乎出在编辑身上,他在解释qresource别名时遇到了问题。


更好的选择是为.qml文件使用别名:

...
<qresource prefix="/LockScreen">
<file alias="LockScreen.qml">LockScreen/LockScreen.qml</file>
...

main.qml

import "LockScreen"
LockScreen{
// ...
}

注意:别名必须有.qml扩展名,否则Qt Creator将无法正确识别

相关内容

  • 没有找到相关文章

最新更新