2012-05-19 4 views
6

Ho un main.qml con un MainPage.qml inserito attraverso:Qml C++ Trova Bambino

initialPage: MainPage {tools: toolBarLayout} 

perché ho scelto di farlo per Symbian. Quando provo:

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

il messaggio non passa attraverso, ma non ci sono errori, ho anche provato il collegamento di un segnale ad uno SLOT sul MainPage con la "if (Pagina iniziale)", ma ha anche alcuna risposta . Sono riuscito a ottenere un segnale fino alla principale però, ma quando provo:

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

La funzione non viene mai eseguito perché non ottengo un messaggio da console.log affatto a differenza che faccio quando la funzione principale piste. So anche che gli altri metodi non hanno funzionato perché anche non hanno registrato un messaggio o eseguito il resto della loro funzione.

Penso che il problema potrebbe risiedere in MainPage che non viene creato come elemento con un id. Sai cosa potrebbe causare questo?

risposta

8

findChild non cercare il id ma la proprietà objectName che si può semplicemente aggiungere all'interno dell'oggetto MainPage (vedi documentation):

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

Si potrebbe anche accedere a tale oggetto attraverso il initialPage proprietà del rootObject senza la necessità di aggiungere un alloggio objectName:

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

Grazie, ho pensato che sembrava per l'id, dopo ho aggiunto il ev nomeoggetto tutto funzionava bene. – Gerharddc