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
给每个文件一个别名,别名由文件名组成,不带路径。
我尝试导入本地目录 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
给每个文件一个别名,别名由文件名组成,不带路径。