2012-05-19 14 views
6

Ich habe einen main.qml mit einem MainPage.qml eingefügt durch:QML C++ finden Child

initialPage: MainPage {tools: toolBarLayout} 

weil ich wählen, um es für Symbian zu machen. Wenn ich versuche:

QObject *mainPage = rootObject->findChild<QObject*>("MainPage"); 
if (mainPage) 
    QDeclarativeProperty(mainPage, "toets").write(3); 

die Nachricht durchkommen nicht, aber es gibt keine Fehler, habe ich auch versucht, mit der ein Signal an einen Steckplatz auf Mainpage verbinden „if (Startseite)“, aber es hat auch keine Antwort . Ich habe es geschafft, obwohl ein Signal bis zur Haupt zu bekommen, aber wenn ich versuche:

function changeNum(num) 
{ 
    MainPage.changeNum(num) 
} 

Die Funktion nie ausgeführt wird, weil ich überhaupt keine Nachricht von console.log erhalten anders als ich tun, wenn die Funktion auf der Haupt läuft. Ich weiß auch, dass die anderen Methoden nicht funktionierten, weil das auch keine Nachricht protokollierte oder den Rest ihrer Funktion ausführte.

Ich denke, das Problem könnte in MainPage liegen nicht als ein Element mit einer ID erstellt werden. Weißt du, was das verursachen könnte?

Antwort

8

findChild sucht nicht nach dem id aber die objectName Eigenschaft, die man einfach im Inneren des MainPage Objekts (s documentation) hinzufügen:

initialPage: MainPage { 
    objectName: "MainPage"  
    tools: toolBarLayout 
} 

Sie könnten auch das Objekt durch die initialPage Eigenschaft der Zugang könnte rootObject ohne die Notwendigkeit, eine objectName Eigenschaft hinzufügen:

QObject * mainPage = QDeclarativeProperty(rootObject, "initialPage").object(); 
if (mainPage) 
    QDeclarativeProperty(mainPage, "toets").write(3); 
+1

Danke, ich dachte, dass es für die id sah, nachdem ich die objektname ev hinzugefügt Alles hat gut funktioniert. – Gerharddc