qtl。无法将属性分配给加载程序加载的对象
我想在QtQuick中编写一个动态加载内容的应用程序。我决定使用加载器。现在我有一个问题,它压倒了我。我想我会花两分钟在这上面,但花了我两天的时间,我的问题仍然没有解决 单击按钮时,我想从.qml文件加载一个对象。单击不同的按钮将为该对象设置不同的属性。对象是一个包含文本的简单矩形。它具有宽度、高度、文本、矩形颜色和文本颜色等属性。问题是,加载带有不同参数的矩形只会改变矩形的颜色。我尝试了这么多的命名、属性别名等组合,但什么也没给我。只有颜色变化。让我向您介绍我的代码:qtl。无法将属性分配给加载程序加载的对象,qt,qml,loader,Qt,Qml,Loader,我想在QtQuick中编写一个动态加载内容的应用程序。我决定使用加载器。现在我有一个问题,它压倒了我。我想我会花两分钟在这上面,但花了我两天的时间,我的问题仍然没有解决 单击按钮时,我想从.qml文件加载一个对象。单击不同的按钮将为该对象设置不同的属性。对象是一个包含文本的简单矩形。它具有宽度、高度、文本、矩形颜色和文本颜色等属性。问题是,加载带有不同参数的矩形只会改变矩形的颜色。我尝试了这么多的命名、属性别名等组合,但什么也没给我。只有颜色变化。让我向您介绍我的代码: //StartState
//StartStateContent.qml --> I wish to use Loaders in my Finite States Machine, hence the name
import QtQuick 2.0
import QtQuick.Controls 2.0
Rectangle {
id: startStateContent
property int myWidth
property int myHeight
property color myColor
property alias myText: name.text
property string myText2
property alias myTextColor: name.color
property color myTextColor2
// width: myWidth
// height: myHeight
color: kolor
Text {
anchors.centerIn: parent
id: name
text: "test"
//text: myText2
color: "yellow"
//color: myTextColor2
}
}
和main.qml的一个片段
Window {
visible: true
id: root
width: 500
height: 500
title: qsTr("Hello World")
Loader
{
id: pageLoader
anchors.top: root.top
anchors.left: root.left
width: root.width
height: root.height/2
}
Button{
id: but1
text: "red"
anchors.top: pageLoader.bottom
anchors.left: root.left
height: root.height/2
onClicked: {
pageLoader.setSource("StartStateContent.qml", {"myColor": "red"}, {"myTextColor" : "white"})
console.log("button red clicked")
}
}
Button{
id: but2
text: "green"
anchors.top: pageLoader.bottom
anchors.left: but1.right
height: root.height/2
width: root.width/2
onClicked: {
pageLoader.setSource("StartStateContent.qml", {"myColor": "green"}, {"myTextColor" : "green"})
console.log("button green clicked")
}
}
DSM.StateMachine{
id: stateMachine
initialState: startState
running:true
onStarted: {
pageLoader.setSource("StartStateContent.qml", {"myColor": "blue"}, {"myTextColor" : "orange"})
console.log("App started")
}
这里我尝试只设置颜色和text.color,但之前我也尝试更改文本矩形的大小。起初,我试着写{“height”:100}
。然后{“height”:“100”}
,{“height”=100}
,等等。然后我添加了属性myHeight
(在第一个文件中注释),但运气不好。然后我对文本做了同样的处理。后来我尝试创建文本的别名属性。我对每一处房产都这样做了(但为了节省空间,我把它从那个例子中删掉了),但没有成功。当然,我也改变了加载器的锚。我尝试使用锚,使用显式设置x,y,宽度,高度;使用定心。与尝试无关,当我单击按钮时正在更改的正是矩形的颜色。不幸的是,官方Qt文档中使用带有属性的Loader的唯一示例只更改了color属性,因此对我没有帮助
我的问题是:如何使用Loader.setProperty()
方法更改加载对象的属性(颜色除外)?先谢谢你
顺便说一句,这是我在这里的第一篇帖子,大家好,Qt世界:)
对于可能出现的语言错误,我深表歉意,因为英语不是我的母语。我从官方论坛得到了答案: 而不是使用
pageLoader.setSource("StartStateContent.qml", {"myColor": "red"}, {"myTextColor" : "white"})
应该使用
pageLoader.setSource("StartStateContent.qml", {"myColor": "red", "myTextColor" : "white"})
因为
setSource
方法需要一个对象。100%都是这样 我也编辑了你的答案,但是下次请不要忘记使用代码格式化工具。是的,属性是一个实体对象。您还可以使用Binding{}
元素。