2011-06-02 7 views
17

QML में स्वचालित रूप से तत्व को फैलाने के लिए यह कैसे संभव है ताकि उसके सभी बच्चे इसमें फिट हो सकें? और अंतर को निर्दिष्ट करने के लिए कैसे? उदाहरण के लिए, मैं एक पाठ के चारों ओर एक आयत रखना चाहता हूँ। आयताकार में कुछ आंतरिक अंतर होना चाहिए।सभी बच्चों को रखने के लिए तत्व खींचना

यदि मैं निम्नलिखित लिखता हूं तो आयताकार का आकार 0,0 है।

Rectangle { 
    color: "gray" 
    anchors.centerIn: parent; 

    Text { 
     text: "Hello" 
    } 
} 

अगर मैं, Column तत्व का उपयोग करके इसे ठीक करने के रूप में How to make QML items to grow to fit contents? में सुझाव दिया की कोशिश, तो मैं पूरे खिड़की/माता-पिता के माध्यम से एक स्तंभ मिलता है,

Column { 
    anchors.centerIn: parent 

    Rectangle { 
     color: "gray" 
     anchors.fill: parent 
    } 

    Text { 
     anchors.centerIn: parent 
     text: "Hello" 
    } 
} 

संपादित करें:

मैंने Column के बजाय Flow तत्व का उपयोग करने का भी प्रयास किया है, लेकिन फिर मुझे wh के माध्यम से एक पंक्ति मिली ओले खिड़की/अभिभावक।

उत्तर

36

आप इस के लिए childrenRect संपत्ति का उपयोग कर सकते हैं:

import QtQuick 1.1 

Rectangle { 
    width: 320 
    height: 200 

    Rectangle { 
     color: "BurlyWood" 
     anchors.centerIn: parent 
     width: childrenRect.width + 20 
     height: childrenRect.height + 20 

     Text { 
      id: hello 
      x: 10 
      y: 10 
      text: "Hello" 
     } 

     Text { 
      anchors.left: hello.right 
      anchors.leftMargin: 10 
      anchors.top: hello.top 
      text: "World" 
     } 
    } 
} 

हालांकि, ध्यान दें कि संयोजन में childrenRect उपयोग करने के साथ सीधे बच्चों में से एक में anchors.centerIn: parent का उपयोग बाध्यकारी पाश के बारे में चेतावनी उत्पन्न करता है।

+0

'main.qml: 6: ReferenceError: childrenRect परिभाषित नहीं किया गया है। समस्या क्या है? क्यूटी 5.3, QtQuick 2.3 – ManuelSchneid3r

+0

@ ManuelSchneid3r हम्म, मैं आपकी समस्या को पुन: उत्पन्न नहीं कर सकता। मैंने QtQuick 2.3 में आयात को बदलने के बाद 'qmlscene' के साथ उपरोक्त कोड को चलाने के साथ इसे क्यूटी 5.5 के साथ आजमाया। ठीक काम किया। –

+0

समस्या यह थी कि मैंने इसे 'विंडोस्कोप' में करने की कोशिश की। वहां, बच्चों को संदर्भित नहीं किया गया है। – ManuelSchneid3r

4

स्थापना width और height मैन्युअल रूप से काम करता है, लेकिन एक छोटे से बदसूरत है:

Rectangle { 
    color: "gray" 
    width: label.width+20 
    height: label.height+20 
    anchors.centerIn: parent 

    Text { 
     id: label 
     anchors.centerIn: parent 
     text: "Hello" 
    } 
} 
संबंधित मुद्दे