Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
qtl。无法将属性分配给加载程序加载的对象_Qt_Qml_Loader - Fatal编程技术网

qtl。无法将属性分配给加载程序加载的对象

qtl。无法将属性分配给加载程序加载的对象,qt,qml,loader,Qt,Qml,Loader,我想在QtQuick中编写一个动态加载内容的应用程序。我决定使用加载器。现在我有一个问题,它压倒了我。我想我会花两分钟在这上面,但花了我两天的时间,我的问题仍然没有解决 单击按钮时,我想从.qml文件加载一个对象。单击不同的按钮将为该对象设置不同的属性。对象是一个包含文本的简单矩形。它具有宽度、高度、文本、矩形颜色和文本颜色等属性。问题是,加载带有不同参数的矩形只会改变矩形的颜色。我尝试了这么多的命名、属性别名等组合,但什么也没给我。只有颜色变化。让我向您介绍我的代码: //StartState

我想在QtQuick中编写一个动态加载内容的应用程序。我决定使用加载器。现在我有一个问题,它压倒了我。我想我会花两分钟在这上面,但花了我两天的时间,我的问题仍然没有解决

单击按钮时,我想从.qml文件加载一个对象。单击不同的按钮将为该对象设置不同的属性。对象是一个包含文本的简单矩形。它具有宽度、高度、文本、矩形颜色和文本颜色等属性。问题是,加载带有不同参数的矩形只会改变矩形的颜色。我尝试了这么多的命名、属性别名等组合,但什么也没给我。只有颜色变化。让我向您介绍我的代码:

//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{}
元素。