2016-09-23 70 views
1

我想在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世界:) 對於可能的語言錯誤抱歉,因爲英文不是我的母語。

回答

2

我從官方QtForum答案:

而不是使用

pageLoader.setSource("StartStateContent.qml", {"myColor": "red"}, {"myTextColor" : "white"}) 

應該使用

pageLoader.setSource("StartStateContent.qml", {"myColor": "red", "myTextColor" : "white"}) 

因爲setSource方法需要一個對象。以這種方式100%工作!

+0

我也編輯了你的答案,但請不要忘記下次使用代碼格式工具。 – MayeulC

+0

是的,屬性是一個固體對象。你也可以使用'Binding {}'元素。 – dtech

相關問題