2015-01-27 7 views
6

'font.family'또는 'anchors.fill'과 같이 중첩 된 속성을 사용하려고 시도하지만 '존재하지 않는 속성에 할당 할 수 없습니다'라는 내용을 출력하므로 정상적인 방법으로 초기화 할 수 없습니다. 대신 Component.onCompleted 메서드를 사용해야합니다. 뭐가 문제 야?그룹화 된/중첩 된 속성을 만드는 방법은 무엇입니까?

MyButtonStyling.qml :

import QtQml 2.1 

QtObject 
{ 
    property QtObject background: QtObject 
    { 
     property color pressed: "#CCCCCC" 
     property color enabled: "#666666" 
     property color disabled: "#555555" 
    } 
} 

main.qml :

import QtQuick 2.0 

Item 
{ 
    width: 400 
    height: 300 
    MyButton 
    { 
     text: "TEST" 
     styling: MyButtonStyling 
     { 
      //background.enabled: "#1B2E0A" //Cannot assign to non-existent property "enabled" 
      Component.onCompleted: 
      { 
       background.enabled = "#1B2E0A" //Works 
      } 
     } 
    } 
} 

MyButton.qml :

import QtQuick 2.0 
import QtQuick.Controls 1.0 
import QtQuick.Controls.Styles 1.0 

Button 
{ 
    property QtObject styling: MyButtonStyling {} 

    implicitWidth: 80 
    implicitHeight: 80 

    style: ButtonStyle 
    { 
     background: Item 
     { 
      Rectangle 
      { 
       anchors.fill: parent 
       color: control.pressed ? styling.background.pressed : control.enabled ? styling.background.enabled : styling.background.disabled 
      } 
     } 
    } 
} 
+1

당신이 위의 코드를 달성하고자하는지 정확히 규명 할 수 있습니까? 이것을 달성하는 더 좋은 방법이있을 수 있지만, 나는 당신이 무엇을하려고하는지 완전히 명확하지 않습니다. – MrEricSir

답변

10

교체 시도를 A QML 파일로 중첩 QtObject. 예를 들어 BackgroundTheme.qml으로 바꿨습니다. 이렇게하면 속성 ("그룹화 된 속성"이라고도 함)이 바인딩에서 오류없이 올바르게 작동합니다.

BackgroundTheme.qml

import QtQuick 2.0 

QtObject { 
    property color pressed: "#CCCCCC" 
    property color enabled: "#666666" 
    property color disabled: "#555555" 
} 

MyButtonStyling.qml

import QtQuick 2.0 

QtObject {  
    property BackgroundTheme background: BackgroundTheme {} 
}