2013-07-30 4 views
6

मैं क्यूटी 5.1 और क्यूटी क्विक 2 के साथ एक गेम लिखने की कोशिश कर रहा हूं और यह नया (तेज़) ग्राफिक इंजन है। मैं घंटों के लिए प्रलेखन पढ़ रहा हूं लेकिन अभी भी यह पता नहीं लगा सकता कि कक्षाओं का उपयोग किस प्रकार करना है यदि मैं स्क्रीन पर आइटम ले जाना चाहता हूं जिनकी स्थिति सी ++ कोड द्वारा निर्धारित की जाती है।क्यूटी क्विक 2 में किस वर्ग का उपयोग करना है और कैसे?

क्यूग्राफिक्स में यह आसान था: मैं QGraphicsScene का एक उदाहरण बना देता हूं, इसमें QGraphicsItem का कोई भी उत्तराधिकारी जोड़ें और उसके बाद QGraphicsView का एक उदाहरण बनाएं जो एक विजेट है और सभी आइटम और उनके परिवर्तन प्रदर्शित करता है। मैं परिवर्तन करने के लिए संकेतों के लिए QGraphicsItem कनेक्ट करता हूं।

क्यूटी त्वरित 2 में मैं पहली बार

  • official examples कि केवल QML और जावास्क्रिप्ट इस्तेमाल किया, पढ़
  • तो मैंने सोचा कि मैं QGraphics, अर्थात् QDeclarativeEngine, QDeclarativeComponent और QDelcarativeView के समकक्ष थे पाया और कस्टम QML तत्वों को बनाने के लिए तैयार था Q_PROPERTY
    • अद्यतन: अभी मुझे पता चला है कि QDeclarative * Qt Quick 1 और QQml * समकक्ष Qt Quick 2 उपसर्ग है।
  • लेकिन फिर मुझे QQuickItem, QQuickWindow, QSGNode etc. भी मिला।
कई ट्यूटोरियल दस्तावेज़ों को पढ़ने के बाद भी मुझे नहीं पता कि "डिफ़ॉल्ट" समाधान क्या है। प्रत्येक ट्यूटोरियल कुछ अलग दिखाता है। मैं सभी उदाहरणों और वर्गों से अभिभूत हूं।

  • किसी ने मुझे एक बुनियादी उदाहरण है कि क्यूटी त्वरित 2 और जहां एक कैनवास पर छवियों संकेत है कि सी ++ में लिखा नियमित QObjects से भेजे जा रहे हैं द्वारा चारों ओर ले जाया जाता है पर आधारित है दे कृपया कर सकते हैं?
  • क्या आप कृपया मुझे बताई गई सभी कक्षाओं को वर्गीकृत करने में मेरी सहायता कर सकते हैं। मैं कब उपयोग करूं?

उत्तर

6

मुझे लगता है कि आप विभिन्न स्तरों पर चीजों के बारे में भ्रम की स्थिति बना रहे हैं, और कहा कि acually इस सवाल का एक "मिश्रित" सवाल जो छोटे प्रश्नों में विभाजित किया जाना चाहिए है ...

किसी भी तरह:

  • जब आप एक QWindow जो QtQuick 2 सामग्री की मेजबानी करने में सक्षम है की जरूरत है, तो आप एक QQuickView या एक QQuickWindow (आमतौर पर पूर्व, अधिक सुविधा प्रदान करता है, उनके डॉक्स देखें) की जरूरत है।
  • QtQuick2 QGraphicsView-आधारित नहीं है। यह QtWidgets में भी नहीं है - आप वहां किसी भी विजेट-संबंधित क्लास या एपीआई का उपयोग नहीं कर सकते हैं।
  • सी ++ ऑब्जेक्ट में से किसी एक को QML तत्व प्रॉपर्टी को बांधने का सबसे आसान तरीका केवल उस ऑब्जेक्ट को QML इंजन पर उजागर करना है, फिर सामान्य बाइंडिंग करना।

उदाहरण के लिए:

class MyObject : public QObject { 
    Q_OBJECT 
    Q_PROPERTY(int horizontalPos READ horizontalPos NOTIFY horizontalPosChanged) 
public: 
    int horizontalPos() const { return m_horizontalPos; } 
signals: 
    void horizontalPosChanged(); 
    // etc. 
} 

तो फिर तुम QML इंजन के लिए MyObject का एक उदाहरण का पर्दाफाश कर सकते हैं:

MyObject obj; 
QQuickView view; 
// exposes the object under the "_myObject" name 
view.engine()->context()->setContextProperty("_myObject", &obj); 

अंडरस्कोर तथ्य यह है कि इस नाम आता है रेखांकित करने के लिए एक अच्छा स्पर्श है सी ++ दुनिया से।

अंत में, QML में, तुम बस संपत्ति के लिए बाध्य कर सकते हैं:

Rectangle { 
    x: _myObject.horizontalPos // voilà, they're bound together 
} 
+0

जब मैं एक QWindow की जरूरत है? यह मेरी समस्या का हिस्सा है। क्यूग्राफिक्स के साथ मैंने अपने लेआउट में कहीं भी QGraphicView जोड़ा। – problemofficer

+0

आप वही नहीं कर सकते, क्योंकि 'QQuickView'' QWidget' नहीं है; आप 'QWidget :: createWindowContainer' का उपयोग करके इस तरह के दृश्य को होस्ट कर सकते हैं। – peppe

2

आप गतिशील C++ ओर से कस्टम qml घटकों का दृष्टांत और गुण, अभी भी सी ++ की ओर से संशोधित कर सकता है।

आप कुछ सी ++ सूची/मॉडल/एकाधिक qobjects पर भी काम कर सकते हैं जिसमें आपके sprites/characters/जो भी आप स्क्रीन पर प्रदर्शित होते हैं, की स्थिति होती है, और फिर इस सूची को अपने qml पक्ष से बांधें।

तुम भी सी ++ कि अपने बच्चों लेआउट (यहाँ प्रस्तावित की तरह: http://qt-project.org/forums/viewthread/29407/) से कुछ QQuickItem लिख सकता है

-

और यहाँ कुछ peppe के जवाब पूरा लिंक हैं/ब्यौरा मिश्रण करने के लिए कैसे QtQuick2 & सी ++:

क्यूटी त्वरित 2/C++ एकीकरण (Qt5 डॉक में अच्छी तरह से गूगल द्वारा अनुक्रमित नहीं है) के लिए डॉक पृष्ठों:

ब्लॉग पोस्ट (यह केवल यदि आप एक QtWidget आवेदन में QtQuick2 एम्बेड करना चाहते हैं समझा QWidget :: createWindowContainer ... अन्यथा, तुम सिर्फ QtCreator से एक QtQuick2 आवेदन के लिए उपयोग कर सकते हैं कंकाल):

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