2015-01-27 8 views
6

Ich versuche geschachtelte Eigenschaften wie 'font.family' oder 'anchors.fill' zu tun, aber ich kann sie nicht auf normale Weise initialisieren, weil sie 'Nicht zu nicht existierender Eigenschaft zuweisen' ausgibt. Stattdessen muss ich die Component.onCompleted-Methode verwenden. Was ist los mit dir?Wie erstellt man gruppierte/verschachtelte Eigenschaften?

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

Können Sie klären genau das, was Sie mit dem obigen Code zu erreichen, sind die beabsichtigen? Es mag einen besseren Weg geben, dies zu erreichen, aber ich weiß nicht genau, was Sie zu tun versuchen. – MrEricSir

Antwort

10

Versuchen Sie verschachtelte QtObject mit QML-Datei zu ersetzen. Zum Beispiel habe ich es durch BackgroundTheme.qml ersetzt. Auf diese Weise funktioniert die Eigenschaft (die korrekterweise als "gruppierte Eigenschaft" bezeichnet werden kann) korrekt, in einer Bindung und ohne Fehler.

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 {} 
}