Properties 如何将QML项分配给QML中的组件属性,然后在组件内使用该对象?
我正在尝试创建一个QML对象,它的作用类似于其他对象的包装器。这是我的QML文件(Container.QML): 我想做的事情(在使用此组件的QML中)如下所示:Properties 如何将QML项分配给QML中的组件属性,然后在组件内使用该对象?,properties,qml,Properties,Qml,我正在尝试创建一个QML对象,它的作用类似于其他对象的包装器。这是我的QML文件(Container.QML): 我想做的事情(在使用此组件的QML中)如下所示: Container { label: "My Label" control: Textbox { text: "My Value" } } Item { property string label property alias control : loader.sourceCo
Container {
label: "My Label"
control: Textbox {
text: "My Value"
}
}
Item {
property string label
property alias control : loader.sourceComponent
width: 200; height: 200
Row {
Label { text: label }
Loader { id: loader }
}
}
当输入该QML时,结果(在接口中)应类似于该QML的输出:
Item {
Row {
Label {
text: "My Label"
}
Textbox {
text: "My Value"
}
}
}
这可能吗?当我尝试执行此操作时,在将项分配给控件属性时,会得到“无法将对象分配给属性”。我搜索了Qt论坛,并用谷歌搜索了一下,但没有成功。如果有人知道答案,我们将不胜感激
谢谢
Jack已经使用QML大约一个月了,恐怕真的不知道该怎么做 最好的计划是找出控件(
Textbox
,在您的示例中)可能是的所有可能的东西,为行中的每个组件创建一个实例,并在项上设置相应的状态。然后,州政府将酌情考虑使所需组件可见或不可见
编辑
只是想。(尚未尝试此操作,但尝试一下!)在项的组件中。完成后:
处理程序,尝试调用控件。createObject(rowID)
,其中rowID
是行对象的id
(您希望成为控件的父对象).您可以使用元素动态加载项,然后将“control”属性设置为直接引用加载程序的sourceComponent属性的
因此,您的Container.qml可以如下所示:
Container {
label: "My Label"
control: Textbox {
text: "My Value"
}
}
Item {
property string label
property alias control : loader.sourceComponent
width: 200; height: 200
Row {
Label { text: label }
Loader { id: loader }
}
}
现在,当您将图形项指定给“control”属性时,它将由加载程序自动显示。有更好的解决方案:
/* MyObject.qml */
Rectangle {
default property alias data /* name can be any */ : inner_space.data
/* ... You can put other elements here ... */
Item {
id: inner_space
/* ... Params ... */
}
/* ... You can put other elements here ... */
}
现在我们可以随心所欲了
/* main.qml */
Rectangle {
MyObject {
Button {
/* ... */
}
}
}
感谢用户建议使用数据
属性而不是子项
,您可以使用自定义属性为其他项目创建容器:
Item
{
id: root
property list<Item> rectList: [
Rectangle
{
parent: root
},
Rectangle
{
parent: root
},
Rectangle
{
parent: root
},
Rectangle
{
parent: root
}
]
}
谢谢你的回复!这个解决方案(据我所知)是可行的,但并不理想。所有这些额外的隐藏控件只是为了呈现一个控件…看起来像是浪费。我会继续努力的。如果我发现了什么,我一定会发回的。这看起来肯定有用。我误解了动态创建对象的文档。你的简短解释为我澄清了这一点。我仍然收到“无法将对象分配给属性”
错误。这没有道理,因为我认识你。例如,矩形接受渐变(我知道不是一个项目,而是一个对象)。我认为你的答案是正确的,我只是不明白为什么这行不通!:)谢谢你的帮助!如果你有更多的见解,让我知道!哇,那个加载器对象看起来很棒!但愿我早就知道了!这是一个更加优雅的解决方案。谢谢分享!这是否适用于非可视项,如TableViewColumn?这实际上是可行的-我从来没有想到我们可以在QML中使用“模板列表”-你在哪里找到的?这有记录吗???我记得没有具体记录。它源于javascript与QObject的设计和集成。不过,关于指定家长的具体情况,我必须通过反复试验来了解
rect.rectList[1].visible = false;