2013-07-29 8 views
11

में स्प्लिट व्यू में गतिशील रूप से तत्व जोड़ें I QQ के साथ काम कर रहा हूं और मैं गतिशील रूप से स्प्लिट व्यू में तत्व जोड़ना चाहता हूं। onMouse क्लिक करें, लेकिन अब तक मुझे जवाब नहीं मिला।क्यूएमएल

जो मैंने अभी तक पाया है वह यह है कि SplitView में इसकी डिफ़ॉल्ट संपत्ति इसके पहले बच्चे की data संपत्ति पर सेट है। तो मुझे लगता है कि मुझे उस बच्चे को पैरेंट सेट के साथ नए गतिशील रूप से बनाए गए घटकों को आजमाएं और जोड़ना चाहिए (splitView1.children[0])। दुर्भाग्य से यह काम नहीं करता है। घटक लोड होने के बाद उस पहले बच्चे के बच्चों की संख्या अधिक है (स्प्लिटलाउट के घटक की तरह लगता है। पूर्ण घटना एक समारोह को कॉल करती है जो उन बच्चों को कहीं और ले जाती है)। इस प्रकार जोड़े गए बच्चे प्रस्तुत नहीं करते हैं (और किसी भी लेआउट संलग्न गुणों का जवाब नहीं देते हैं)।

import QtQuick 2.1 
import QtQuick.Controls 1.0 
import QtQuick.Layouts 1.0 

ApplicationWindow { 
    width: 600 
    height: 400 

    SplitView { 
     anchors.fill: parent 

     Rectangle { 
      id: column 
      width: 200 
      Layout.minimumWidth: 100 
      Layout.maximumWidth: 300 
      color: "lightsteelblue" 
     } 

     SplitView { 
      id: splitView1 
      orientation: Qt.Vertical 
      Layout.fillWidth: true 

      Rectangle { 
       id: row1 
       height: 200 
       color: "lightblue" 
       Layout.minimumHeight: 1 
      } 

//   Rectangle {    //I want to add Rectangle to splitView1 like this one, but dynamicly eg.onMouseClick 
//    color: "blue" 
//   } 
     } 
    } 

    MouseArea { 
     id: clickArea 
     anchors.fill: parent 
     onClicked: { 
      console.debug("clicked!") 
      console.debug("len: " + splitView1.__contents.length); // __contents is the SplitView's default property - an alias to the first child's data property 

      var newObject = Qt.createQmlObject('import QtQuick 2.1; Rectangle {color: "blue"}', 
       splitView1, "dynamicSnippet1"); //no effect 

//   var newObject = Qt.createQmlObject('import QtQuick 2.1; import QtQuick.Layouts 1.0; Rectangle {color: "blue"; width: 50; height: 50}', 
//    splitView1, "dynamicSnippet1"); //rectangle visible, but not in layout(?) - not resizeable 
     } 
    } 
} 

वहाँ किसी भी तरह से मैं गतिशील बनाया घटकों स्थिर जोड़ा लोगों के रूप में SplitView में ठीक से प्रस्तुत कर सकते हैं है:

कृपया निम्नलिखित कोड का टुकड़ा देखते हैं?

उत्तर

3

ऐसा प्रतीत होता है कि एपीआई नए तत्वों के गतिशील सम्मिलन के लिए समर्थन प्रदान नहीं करता है। भले ही आप इसे काम करने के लिए प्राप्त करते हैं, यह एक हैक होगा और भविष्य की रिलीज के साथ तोड़ सकता है। आप जिस व्यवहार को चाहते हैं उसकी नकल करने के लिए आपको अपना नियंत्रण स्थापित करने की आवश्यकता हो सकती है। आदर्श रूप से इसे किसी प्रकार के मॉडल द्वारा समर्थित किया जाना चाहिए।

0

आपको लोडर डायनामीकल ऑब्जेक्ट्स के लिए लोडर का उपयोग करना होगा। onClicked में संभाल आप sourceComponent संपत्ति घोषित करने के लिए इस तरह लोडर के स्रोत, कुछ बदलने के लिए है:

ApplicationWindow { 
width: 600 
height: 400 

SplitView { 
    anchors.fill: parent 

    Rectangle { 
     id: column 
     width: 200 
     Layout.minimumWidth: 100 
     Layout.maximumWidth: 300 
     color: "lightsteelblue" 
    } 

    SplitView { 
     id: splitView1 
     orientation: Qt.Vertical 
     Layout.fillWidth: true 

     Rectangle { 
      id: row1 
      height: 200 
      color: "lightblue" 
      Layout.minimumHeight: 1 
     } 
    Loader { 
     id:rect 
    } 


    } 
} 

MouseArea { 
    id: clickArea 
    anchors.fill: parent 
    onClicked: { 
     console.debug("clicked!") 
     console.debug("len: " + splitView1.__contents.length) // __contents is the SplitView's default property - an alias to the first child's data property 
     rect.sourceComponent = algo 
    } 
} 

Component { 
    id:algo 
Rectangle { 
    anchors.fill: parent 
    color: "blue" 
} 
} 
} 
+0

यह एक बहुत ही खराब समाधान है क्योंकि आपको यह जानना है कि आपको पहले से कितनी वस्तुओं की आवश्यकता होगी, जो शायद ही कभी मामला है। – cmannett85

0

मैं SPLITVIEW के स्रोत कोड देखा, यह प्रत्येक विभाजन क्षेत्र की गणना जब संकेत Component.onCompleted। तो मुझे लगता है कि यह एक महत्वपूर्ण बिंदु है। कोई फर्क नहीं पड़ता कि आप कैसे करते हैं (डालें, गतिशील बनाएं)। विभाजन के लिए एक नया क्षेत्र डालने के बाद क्षेत्र रीसेट नहीं किया जाएगा।

3

QtQuick नियंत्रण 1.3, SplitView के रूप में addItem(item)method है।

संबंधित मुद्दे