开发 Qt Quick 项目需要用到 QML,每个 QML 文件都可以成为一个组件。
一个大规模项目,难免用到众多组件(也就是要写多个 QML 文件),这些组件按照文件的组织,可能分布在不同文件夹下。
在 QML 文件看来,不同文件夹下的组件属于不同的包。
因此,一个 Qt Quick 项目中的 QML 组件组成和使用方式可能如下:
先看 QML 的项目文件,也就是“*.qmlproject”文件。其内容通常如下:
import QmlProject 1.1
Project {
mainFile: "*.qml"
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
directory: "."
}
JavaScriptFiles {
directory: "."
}
ImageFiles {
directory: "."
}
/* List of plugin directories passed to QML runtime */
// importPaths: [ "../exampleplugin" ]
}
该文件包含了 QML、JS、Img 等文件的路径,在 QML 文件路径下的 QML 组件都可以直接使用。
例如,*.qmlproject 与 G01.qml、G02.qml 位于同一目录下(组件的名必须以大写字母开头),则在 G01.qml 中可以这样使用 G02.qml。
import QtQuick 2.0
import QtQuick.Controls 1.2
import QtQuick.Window 2.2
ApplicationWindow {
title: qsTr("Hello World")
G02{x:0; y:0}
}这是因为:“对于同一目录中的其他 QML 组件和应用程序来说,新建的 QML 组件文件会自动成为新的 QML 元素类型。”——《Qt 及 Qt Quick 开发实战精解》
如果另有 G03.qml 位于 *.qmlproject 的下一级文件夹“folder”下,则需要先在 G01.qml 中引入“folder”这个包:import QtQuick 2.0import QtQuick.Controls 1.2import QtQuick.Window 2.2import "folder"ApplicationWindow {title: qsTr("Hello World")G02{x:0; y:0}G03{x:0; y:25}}可以看到,在 G01中可以直接使用 G03 的根属性(如:x、y)。但如果想在要在 G01.qml 中使用 G03 的内部对象的属性,则需要这样编写 G03.qml:
import QtQuick 2.0Rectangle {id: recproperty alias text1:textItem.textwidth: 100; height: 20; color:"orange"Text{id: textItem; color:"black"}}这里的 Rectangle 即为根元素。其他组件可以直接使用根元素的属性,如上面说的x,y属性。根元素内部创建了一个 Text 类型的 textItem 对象,”property alias text1: textItem.text“这句是为 textItem 对象的 text 属性重新指定了一个名称——text1,这样,其他组件才可以使用 text1 属性。例如 G01 可是这样使用 text1 属性。
import QtQuick 2.0import QtQuick.Controls 1.2import QtQuick.Window 2.2import "folder"ApplicationWindow {title: qsTr("Hello World")G02{x:0; y:0}G03{x:0; y:25}G03{x:105; y:50; text1:"Grape"}}