qml 本地导入:高亮显示或有效

qml local import: either highlited, or works

我尝试导入本地目录 qml 文件时遇到问题(它们位于 qml.qrc 的另一个前缀中)

import QtQuick 2.0
import QtQuick.Controls 1.3
import QtQuick.Dialogs 1.2
import "Components"
//import "qrc:/Components/QMLs/Components"

Rectangle {
    id: mainLocalRect
    width: 300
    height: 500
    color: "orange"

    HIcon {
        id: hIcon
        x: 0
        y: 0
    }
}

因此,我在部署时遇到错误:

qrc:/QMLs/welcome.qml:4:1: "Components": no such directory

但是有目录 Components 并且在 Qt Creator 中 HIcon 被高亮显示。

https://yadi.sk/i/eF1QKfxEhsdiY

我尝试了另一种导入方式:

import "qrc:/Components/QMLs/Components"

及其作品!但是现在 SideMenu 没有突出显示

https://yadi.sk/i/jmdgDZ4dhsdix

项目中的文件结构:

main.qml
--QMLs/
----class.qml
----welcome.qml
....
----Components/
------HIcon.qml

问:如何正确导入目录?

您可以简单地使用:

import "rel_path"

其中 rel_path 是从包含导入语句的文件的角度来看的相对路径。

例如,如果组件 C 位于父目录的名为 D 的子目录中,请使用:

import "../D/"

从现在开始,您可以在您的文件中自由使用C

使用正确的 qrc 导入时突出显示不起作用的原因是 QtCreator 不检查 qrc 文件。

另外你还得知道资源系统是怎么打包文件的。每个文件都将与您的 .qrc 文件的相对路径一起打包:

main.qml -> qrc:///main.qml
QMLs/welcome.qml -> qrc:///QMLs/welcome.qml

在资源文件中使用前缀时,这些前缀将被添加到相对路径中。 (不是Qt'copies'那个文件放到指定的prefix/folder)
在导致以下情况的项目中:

QMLs/Components/SideMenu.qml -> qrc:///Components/QMLs/Components/SideMenu.qml
QMLs/Components/Helpers/MenuBackIcon.qml -> qrc:///Helpers/QMLs/Components/Helpers/MenuBackIcon.qml

这不仅仅是绝对的变化URL。它还'moves'文件中的相对位置。

现在,为了使事情变得更好,您可以为 .qrc 文件中的每个文件指定一个 alies。别名可以只是一个文件名,它将与前缀组合以构成完整的 URL:

假设您为文件 QMLs/Components/HIcon.qml 指定了别名 HIcon。这将导致完整的 URL 将是这样的情况: qrc:///Components/HIcon.qml

因为您的 .qrc 文件在导入路径列表中,您现在可以按照您期望的方式编写代码:

import "Components"
[..]
    HIcon {
       [..]
    }

结论/TL;DR

给每个文件一个别名,别名由文件名组成,不带路径。