2016-04-05 53 views
3

我有一個使用加載器加載Page1.qml的main.qml。如何從我的cpp代碼中找到Page1.qml中的對象'whiteArea'?使用cpp代碼從加載的qml訪問qml對象

我目前正在使用以下來獲取一個對象,並希望獲得加載的qml以及這樣。

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

Qt documentation

加載的對象可以使用項目屬性進行訪問。

所以,你應該做一些subsearch加載的項目裏面,比如像這樣:

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