2016-04-05 15 views
3

Yükleyicileri kullanarak Page1.qml yükleyen bir main.qml var. Cpp kodumdan "whiteArea" nesnesini Page1.qml içinde nasıl bulabilirim?Yüklü qml'den qml nesnelerine cpp kodu kullanarak erişme

Şu anda bir nesneyi almak için aşağıdakileri kullanıyorum ve bununla birlikte yüklenen qml'yi de almak istiyorum. Qt documentation kaynaktan

QObject * object = engine.rootObjects().at(0)->findChild<QObject *> ("yourObjectName"); 

main.qml

import QtQuick 2.3 
import QtQuick.Controls 1.2 
import myplugin 1.0 

ApplicationWindow { 
    id:app 
    visible: true 
    width: 640 
    height: 480 
    title: qsTr(" World") 
    objectName: "Appwindow" 
    property ApplicationWindow appwindow:app 
    Label { 
     objectName: "label" 
     text: qsTr(" World") 
     anchors.centerIn: parent 
    } 

    MyItemTest{ 
     objectName: "myItem" 
     anchors.fill: parent 
    } 

    Rectangle{ 
     objectName: "Rectangle" 
     id:rect 
     width: 50 
     height: 50 
     color: "yellow" 
    } 

    Button { 
     objectName: "MyButton" 
     id: btnClick 
     text : "btn" 
     Loader { id: pageLoader } 
     onClicked: { 
      pageLoader.source = "Page1.qml" 

     } 
    } 
} 

Page1.qml

import QtQuick 2.0 
import QtQuick 2.3 
import QtQuick.Controls 1.2 
import myplugin 1.0 

Item { 
    Rectangle{ 
     objectName: "whiteArea" 
     id:rect 
     width: 50 
     height: 50 
     color: "white" 
    } 
} 

cevap

3

:

yüklü nesne et özelliği kullanılarak erişilebilir.

Yani böyle örneğin, yüklü bir öğenin içindeki bazı subsearch yapmalıdır:

QObject * loader = engine.rootObjects().at(0)->findChild<QObject*>("loader"); 
qWarning() << loader; 
QObject * item = qvariant_cast<QObject*>(QQmlProperty::read(loader,"item")); 
qWarning() << item; 
QObject *whiteArea = item->findChild<QObject *>("whiteArea"); 
qWarning() << whiteArea; 

çıkışı:

QQuickLoader(0x24918240, name = "loader") 
QQuickItem(0x24919740) 
QQuickRectangle(0x24919728, name = "whiteArea")