我正在尝试以模块化的方式编写我的QML组件,以便能够动态更改图形,但我正在努力将它们嵌套在一个层次上,这是一个例子:
import QtQuick 2.0
import QtGraphicalEffects 1.0
WindowFrame {
id: this_item
property Component body //this wont load the component
property alias footer: footer_loader.sourceComponent //this gives an error -> Invalid alias reference. Unable to find id "footer_loader"
property int footer_height: 70
body: Item {
id: body_component
Loader {
id: body_loader
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
height: parent.height-this_item.footer_height
sourceComponent: this_item.body
}
Item {
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
height: this_item.footer_height
z: 2
Rectangle {
anchors.fill: parent
color: Qt.rgba(0, 0, 0.5, 1)
layer.enabled: true
layer.effect: DropShadow {
transparentBorder: true
horizontalOffset: 0
verticalOffset: -8
radius: 8.0
samples: 17
color: Qt.rgba(0, 0, 0, 0.5)
}
}
Loader {
id: footer_loader
anchors.fill: parent
}
}
}
}
目标是使用预定义的空间(例如卡片)构建组件,然后在其中加载其他元素,除了使用加载器之外没有找到任何其他内容,它应该怎么做?有更好的方法吗?
答案 0 :(得分:1)
你必须创建组件类型对象,而不是项目类型
import QtQuick 2.0
import QtGraphicalEffects 1.0
WindowFrame {
id: this_item
property Component body //this wont load the component
/*
* here is where you went wrong *
*
*/
body: Component { // change Item to Component
id: body_component
}
Card {
id: myCard
}
Component.onCompleted {
myCard.load_face("qrc:///jack.png")
}
}
但更好的答案是创建多个QML文件并动态创建这样的东西
Item {
id: card
Rectangle {
width: 100
height: 100
}
function load_face(imageSource) {
var component = Qt.createComponent("CardFace.qml");
if (component.status == Component.Ready)
component.createObject(card, {"imageSource": imageSource, "y": 100});
}
}
Item {
id: face
property var imageSource
Image {
source: face.imageSource
}
}