2016-04-05 7 views
3

ローダーを使用してPage1.qmlをロードするmain.qmlがあります。どのようにして私のcppコードからPage1.qml内のオブジェクト 'whiteArea'を見つけることができますか?cppコードを使用して、ロードされたqmlからqmlオブジェクトにアクセスする

私は現在オブジェクトを取得するために次のものを使用していますが、このようにロードされたqmlも取得したいと考えています。 Qt documentationから

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" 
    } 
} 

答えて

3

ロードされたオブジェクトは、アイテムのプロパティを使用してアクセスすることができます。

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; 

出力:

QQuickLoader(0x24918240, name = "loader") 
QQuickItem(0x24919740) 
QQuickRectangle(0x24919728, name = "whiteArea") 
ですから、このような例のために、ロードされたアイテムの内側にいくつか サブサーチ

を行う必要があります

関連する問題