2012-10-24 11 views
8

हमें एक QtQuick प्रोजेक्ट विकसित करने की आवश्यकता है, जहां हमारे पास लगभग 100 स्क्रीन हैं।क्यूएमएल: डिजाइन धारणा से qml पृष्ठों के बीच नेविगेशन

मैंने नेविगेशन के लिए डेमो प्रोजेक्ट बनाने की कोशिश की थी जिसमें बटन क्लिक पर तीन स्क्रीन हैं। मैंने पृष्ठों के बीच नेविगेशन में 'राज्यों' की अवधारणाओं का उपयोग किया था। शुरुआत में मैंने 'लोडर' का उपयोग करके भी कोशिश की लेकिन लोडर पिछले पृष्ठ को बनाए रखने में सक्षम नहीं था, यह नेविगेशन के दौरान पूरे पृष्ठ को फिर से लोड कर रहा था।

नीचे main.qml

// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5 
import QtQuick 1.1 

Rectangle { 
    id:main_rectangle 
    width: 360 
    height: 640 

    Page1{ 
     id:page1 
    } 

    Page2{ 
     id:page2 
    } 

    Page3{ 
     id:page3 
    } 

    states: [ 
     State { 

      name: "page2" 

      PropertyChanges { target: page3; visible:false; } 
      PropertyChanges { target: page1; visible:false; } 
      PropertyChanges { target: page2; visible:true; } 
     }, 
     State { 
      name: "page1" 
      PropertyChanges { target: page3; visible:false; } 
      PropertyChanges { target: page2; visible:false; } 
      PropertyChanges { target: page1; visible:true; } 
     }, 

     State { 
      name: "page3" 
      PropertyChanges { target: page1; visible:false; } 
      PropertyChanges { target: page2; visible:false; } 
      PropertyChanges { target: page3; visible:true; } 
     } 

    ] 

} 

के कोड स्निपेट इस तीन स्क्रीन के साथ छोटे POC के साथ अच्छी तरह से चलाता है इसके संभव 100 स्क्रीन के लिए राज्यों को परिभाषित करने के लिए नहीं है, लेकिन।

डिजाइनिंग पहलू से हमने सी ++ नियंत्रक बनाने के लिए निष्कर्ष निकाला है, हम राज्यों को नियंत्रित करते हैं, विभिन्न पृष्ठों की दृश्यता।

सी ++ में 'राज्य' तर्क को कार्यान्वित करने के सुझावों की आवश्यकता है।

+0

आपका लक्षित प्लेटफ़ॉर्म क्या है? –

+0

वर्तमान में हम विंडोज – DNamto

+0

को लक्षित कर रहे हैं मेरा मतलब है कि हम वर्तमान में विंडोज़ पर डेस्कटॉप संस्करणों को लक्षित कर रहे हैं – DNamto

उत्तर

1

मैं क्यूटी त्वरित घटक से स्टैकव्यू का उपयोग करने का सुझाव देता हूं। Here इसका प्रलेखन है।

+0

मुझे पता है कि पेजस्टैक विशेष रूप से सिम्बियन प्लेटफार्म के लिए है। क्या यह विंडोज ओएस पर डेस्कटॉप प्लेटफार्म पर काम करेगा? – DNamto

+0

यदि आपका नेविगेशन पैटर्न फोन जैसा दिखता है, तो मुझे लगता है कि इसका उपयोग करना संभव है। डेस्कटॉप क्यूटी त्वरित घटकों में, जिन्हें मैंने अभी डाउनलोड किया है, मैं केवल एक "दृश्य प्रबंधक" - टैबबार देखता हूं। –

+0

मैं अनुभव से कह सकता हूं कि पेजस्टैक निश्चित रूप से यहां एक समाधान हो सकता है। हालांकि, यह एक बहुत ही जटिल नियंत्रण नहीं है और आप हमेशा अपना खुद का क्रियान्वयन करने पर विचार कर सकते हैं। असल में आप एक मूल ऑब्जेक्ट बनाते हैं जिसमें पेज स्टैक के रूप में एक सरणी होती है और आप पेज बनाने के लिए QML गतिशील ऑब्जेक्ट सृजन का उपयोग करते हैं और आवश्यकतानुसार उन्हें स्टैक पर दबाते हैं। मैं अत्यधिक घटकों में पेजस्टैक के कोड को देखने का सुझाव देता हूं। यह बिल्कुल जटिल नहीं है, और मेरा आपको प्रेरित करता है। – Deadron

6

यहां कॉन्फ़िगर करने योग्य पृष्ठ सूची (एक मॉडल की तरह) + एक पुनरावर्तक + लोडर आइटम का उपयोग करके सादे क्यूएमएल में सबसे आसान समाधान है, स्टार्टअप (आलसी instanciation) पर सब कुछ लोड नहीं करने के लिए और इसे छिपाने के बाद एक पृष्ठ को नष्ट नहीं करने के लिए अगर हम इसे वापस आते हैं तो इसे फिर से लोड करना होगा):

import QtQuick 1.1 

Rectangle { 
    id: main_rectangle; 
    width: 360; 
    height: 640; 

    // Put the name of the QML files containing your pages (without the '.qml') 
    property variant pagesList : [ 
     "Page1", 
     "Page2", 
     "Page3", 
     "Page4", 
     "Page5" 
    ]; 

    // Set this property to another file name to change page 
    property string currentPage : "Page1"; 

    Repeater { 
     model: pagesList; 
     delegate: Loader { 
      active: false; 
      asynchronous: true; 
      anchors.fill: parent; 
      visible: (currentPage === modelData); 
      source: "%1.qml".arg(modelData) 
      onVisibleChanged:  { loadIfNotLoaded(); } 
      Component.onCompleted: { loadIfNotLoaded(); } 

      function loadIfNotLoaded() { 
       // to load the file at first show 
       if (visible && !active) { 
        active = true; 
       } 
      } 
     } 
    } 
} 

आशा है कि इससे मदद मिलती है!

+1

आगे जाने के लिए, आप 'दृश्यमान' प्रॉपर्टी के उपयोग को एक कस्टम के साथ प्रतिस्थापित कर सकते हैं, मान लीजिए कि 'दिखाया गया' जिसका उपयोग 'स्केल' या 'अस्पष्टता' और कुछ 'व्यवहार {}' घटक के साथ अच्छा पृष्ठ करने के लिए किया जाएगा संक्रमण बदलें ... – TheBootroo

+1

और यदि आपके पृष्ठ की क्यूएमएल फाइलें एक ही फ़ोल्डर में नहीं हैं, तो आपको सरणी में पृष्ठ फ़ाइल नाम से पहले और 'currentPage' प्रॉपर्टी' से पहले सापेक्ष पथ प्रदान करना होगा: - यदि सबफ़ोल्डर में : "फ़ोल्डर नाम/फ़ाइल नाम" - यदि किसी मूल फ़ोल्डर में: "../folder/filename" - अंत में एक पूर्ण पथ, लेकिन बहुत अच्छा विचार नहीं है! – TheBootroo

+0

बूटरू का उत्तर त्वरित 2 में संकलित नहीं होगा। यहां परिवर्तन हैं: 'main_rectangle.currentPage' और' main_rectangle.pagesList', अब वैरिएबल की तरह दिखता है। उम्मीद है कि यह किसी की मदद करता है। –

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