1. 使用Component在QML中嵌入组件
Component是Qt框架或者开发者封装好的、只暴露必要接口的QML类型,可以重复使用。要再QML中嵌入Component的定义,需要使用Component对象。
- Component只能包含一个顶层的Item,而且在这个Item之外不能定义任何的数据,除了Id。
- Component通常用来给一个View提供图形化组件。
- Component不是Item的派生类,而是从QQmlComponent继承而来的,虽然它通过自己的顶层Item为其他的View提供可视化组件,但它本身不是可见元素。
下面是一个简单的在QML文档中定义Component的示例:
Component {
id: itemCompont
Rectangle {
id: compontRect
color: 'blue'
implicitWidth: 200
implicitHeight: 50
signal deleteThis()
Text {
id: interText
anchors.left: parent.left
anchors.leftMargin: 10
anchors.verticalCenter: parent.verticalCenter
text: qsTr("text")
}
Button {
anchors.margins: 5
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.right: parent.right
text: '删除'
onClicked: {
compontRect.deleteThis()
}
}
}
}
2. 在文件中定义组件
很多时候我们把QML文件定义在一个文件中,方便被其他的QML文件调用。可以直接使用文件名作为组件的名称,在其他的QML文件中使用。上面组件中的代码可以单独定义在一个文件中,本示例的文件名为TestCompont.qml
import QtQuick 2.0
import QtQuick.Window 2.0
import QtQuick.Controls 1.4
Rectangle {
id: compontRect
color: Qt.rgba(0.8, 0.4, 0.4, 1.0)
implicitWidth: 200
implicitHeight: 50
property var currentObject: ''
signal deleteThis(var obj)
// 设置文字的内容
function setCurrentText(textName) {
interText.text = textName
}
Text {
id: interText
anchors.left: parent.left
anchors.leftMargin: 10
anchors.verticalCenter: parent.verticalCenter
text: qsTr("text")
}
Butto

本文详细介绍了QML中Component的使用,包括如何在QML文档中定义Component,如何在文件中定义组件,如何使用Loader加载和删除组件,以及如何利用JavaScript创建和删除组件。Component作为不可见元素,提供了组件的封装和复用,Loader则用于动态加载和卸载QML组件。通过Qt.createComponent()和Qt.createQmlObject()等方法,可以在运行时动态管理组件实例。

1408

被折叠的 条评论
为什么被折叠?



