2014-12-03 9 views
5
  1. में एक कोड में कहीं से भी QML जड़ वस्तु प्राप्त कैसे (एक वर्ग विधि एक सी ++ कोड में कहीं से भी एक रूट वस्तु (कोड के नीचे रिटर्न 0, rootContext()->findChild() भी रिटर्न 0) को पुनः प्राप्त करने में जहां वर्ग एक है पंजीकृत क्यूएमएल प्रकार और वर्ग घटक परिभाषा रूट का प्रत्यक्ष बच्चा है, ऑब्जेक्टनाम देखें) और रनटाइम पर उत्पन्न QQuickItem जोड़ें?
  2. Myclass QML प्रकार के रूप में पंजीकृत है। Bottommost कोड का उपयोग कर दृश्य में QML Button कैसे जोड़ें?

main.qml में (टुकड़ा)क्यूटी 5.3

import QtQuick 2.3 
import QtQuick.Window 2.2 

Window { 
    objectName: root 

    visible: true 
    width: 360 
    height: 100 

    // ... 
} 

myclass.cpp

void myclass::add_hip() 
{ 
    setProperty("hip", 87); 

    QQmlEngine *engine = QtQml::qmlEngine(this); 

// QObject *root = engine->rootContext()->findChild<QObject*>("womanObj"); 
    QQuickWindow *window = qobject_cast<QQuickWindow *>(root); 
    QObject *wobj = window->findChild<QObject *>("womanObj"); 
    // 1. Define a QML component. 
    QQmlComponent *readHipComp = new QQmlComponent(engine); 
    readHipComp->setData("import QtQuick.Controls 1.2\n\ 
         Button {\n\ 
          anchors.top: addHipBtn.top\n\ 
          anchors.left: addHipBtn.left\n\ 
          anchors.margins: 3\n\ 
          text: \"Hip value\"\n\ 
          onClicked: {\n\ 
           msgDlg.text = myclass.hip\n\ 
           msgDlg.open()\n\ 
          }\ 
         }", QUrl()); 
    // 2. Create the component instance. 
    QQuickItem *readHipBtn = qobject_cast<QQuickItem *>(readHipComp->create()); 
    // 3. Add the instance to the scene. 
// readHipBtn->setParentItem(qobject_cast<QQuickItem *>(engine->rootContext()->contextObject())); 

// QObject *root = QtQml::qmlContext(this)->findChild<QQuickItem *>("root"); 
// readHipBtn->setParent(root); 
} 

अद्यतन

extern QQuickWindow *window; 
void myclass::add_hip() 
{ 

    //... 
readHipBtn->setParentItem(window->contentItem()); 
//... 
} 

काम किया, लेकिन 3.) यह नहीं देखता अन्य main.qml वस्तुओं।

+0

क्या आप "कहीं भी" द्वारा मतलब है? क्यूएमएल में कहीं भी? Main.cpp के अलावा C++ फ़ाइलों में कहीं भी? –

+0

सी ++ कक्षा विधि – programmist

उत्तर

1

आपको ऑब्जेक्टनाम की आवश्यकता नहीं है।

प्राप्त मूल तत्व और जाँच लें कि यह एक खिड़की है:

QQmlApplicationEngine engine; 
engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 
QObject *root = engine.rootObjects()[0]; 

QQuickWindow *window = qobject_cast<QQuickWindow *>(root); 
if (!window) { 
    qFatal("Error: Your root item has to be a window."); 
    return -1; 
} 
window->show(); 
+0

क्लास विधि से रूट विंडो का उपयोग कैसे करें जहां कक्षा एक पंजीकृत QML प्रकार है और वर्ग घटक परिभाषा main.qml में है? – programmist