qml本地导入:highlited或者工作

时间:2015-07-15 08:02:21

标签: qt import qml local highlight

我尝试导入本地目录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

但有目录组件,并在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

问题:如何正确导入目录?

2 个答案:

答案 0 :(得分:1)

您可以简单地使用:

import "rel_path"

其中rel_path是包含import语句的文件的相对路径。

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

import "../D/"

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

答案 1 :(得分:0)

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

此外,您必须知道资源系统如何打包文件。每个文件都将与它的.qrc文件的相对路径一起打包:

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

在资源文件中使用前缀时,这些前缀将被添加到相对路径中。 (并不是Qt'将该文件复制到指定的前缀/文件夹中)
在您的项目中导致以下情况:

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

这不仅是绝对URL的变化。它还“移动”相对于彼此的位置文件。

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

假设您为文件HIcon提供了别名QMLs/Components/HIcon.qml。这将导致完整网址为qrc:///Components/HIcon.qml

的情况

因为您的.qrc文件位于导入路径列表中,所以您现在可以像预期的那样编写代码:

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

结论/ TL; DR

为每个文件指定一个别名,该别名由没有路径的文件名组成。