我想在QtQuick中編寫一個動態加載內容的應用程序。我決定使用Loader。現在我有一個問題,它壓倒了我。我想我會花兩分鐘時間,但是花了兩天時間,我的問題仍然沒有解決。QtQuick QML。無法將屬性分配給使用Loader加載的對象
我想從.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屬性的唯一例子只改變了顏色屬性,所以它不能幫助我。
我的問題是:如何使用Loader.setProperty()
方法更改加載對象的屬性(顏色除外)?先謝謝你。
順便說一句,這是我的第一篇文章,所以你好Qt世界:) 對於可能的語言錯誤抱歉,因爲英文不是我的母語。
我也編輯了你的答案,但請不要忘記下次使用代碼格式工具。 – MayeulC
是的,屬性是一個固體對象。你也可以使用'Binding {}'元素。 – dtech