2015-01-27 6 views
6

मैं 'font.family' या 'anchors.fill' जैसे नेस्टेड गुणों को करने की कोशिश कर रहा हूं, लेकिन मैं उन्हें सामान्य तरीके से प्रारंभ नहीं कर सकता क्योंकि यह प्रिंट करता है 'अस्तित्वहीन संपत्ति को असाइन नहीं कर सकता'। इसके बजाय मुझे घटक का उपयोग करने के लिए मजबूर किया गया है। पूर्ण विधि। क्या गलत है?समूहबद्ध/नेस्टेड गुण कैसे बनाएं?

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

के बजाय ऐसे अपने नेस्टेड QtObject एक QML फ़ाइल के साथ। उदाहरण के लिए, मैंने इसे 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 {} 
} 
संबंधित मुद्दे