gpt4 book ai didi

Qt QML : in-file definition of reusable objects

转载 作者:行者123 更新时间:2023-12-01 00:36:23 25 4
gpt4 key购买 nike

我有一个相当大的 Qml 组件,所以我想使它成为一个可重用的组件,但它太小/非通用,以至于我想避免创建自己的 .qml 文件。
似乎组件是在同一文件中定义可重用对象的正确方法,但是当我这样做时,我不知道如何访问和更改所包含对象的属性。

更具体地说,想象一下有这样的文件内定义

Component {
id: myReusableComponent
// This cannot be set because component does not allow properties
// (Would work fine in a separate file myReusableComponent.qml)
// property alias string innerText: innerText.text
Rectangle {
id: rect
width: 200
height: 200
color: "red"
Text {
id: innerText
text: "Want to set text later"
}
}

在更改它的某些属性的同时,我以后如何重用该组件?
我知道以下不是有效的语法,但我想像这样使用它:
Loader {
id: hello
sourceComponent: myReusableComponent
item.innerText: "Hello" }

Text { text: "Some other stuff in between" }

Loader {
id: world
sourceComponent: myReusableComponent
item.anchors.left: hello.right
item.rect.width: 100
item.rect.color: "blue"
item.innerText: "World" }

Loader {
id: excl
sourceComponent: myReusableComponent
item.rect.color: "green"
item.innerText: "!!!" }
etc...

有任何想法吗?或者是否有一种根本不同的方式来做到这一点?
我本质上想要的是 QML 对象的可重用性,这些对象在原地定义的同时仍然能够更改它们的属性。

This似乎是相关的,但并没有解决创建多个对象的问题。中继器似乎很有用,但没有给我想要的灵活性。

注意:我会在这里添加一些关于答案的评论,因为它们可能会在评论中被忽略。
我喜欢 Blabbouze、derM 和 ddriver 的所有三个答案!
我接受了 Babbouze 的回答,因为它提供了一个与我正在寻找的最接近的具体解决方案。
但是,我也不知道 Loaders 的开销,在阅读 derM 的答案后可能会考虑使用不同的方法。
最后,ddriver 建议的动态对象创建并不是我想要的,但可能对其他人有用。
谢谢大家!

最佳答案

我认为您正在寻找 onLoaded() 信号。当 Loader 时发出它已成功创建 Component .

然后,您可以使用 item 访问您加载的类型属性。 .

import QtQuick 2.7
import QtQuick.Controls 2.0


ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")


Component {
id: myReusableComponent
Rectangle {
id: rect
property alias innerText: innerText.text

width: 200
height: 200
color: "red"
Text {
id: innerText
text: "Want to set text later"
}
}
}


Loader {
id: hello
sourceComponent: myReusableComponent
onLoaded: {
item.innerText = "hello"
}
}

Loader {
id: world
sourceComponent: myReusableComponent
anchors.left: hello.right
onLoaded: {
item.width = 100
item.color = "blue"
item.innerText = "World"
}
}
}

关于Qt QML : in-file definition of reusable objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40890990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com