Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Qml C++ Find Child

I have a main.qml with a MainPage.qml inserted through:

initialPage: MainPage {tools: toolBarLayout}

because I choose to make it for Symbian. When i try:

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

the message doesn't come through but there are no errors, I have also tried connecting a SIGNAL to a SLOT on MainPage with the "if (mainPage)" but it also has no response. I have managed to get a signal through to main though but when I try:

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

The function never gets executed because I don't get a message from console.log at all unlike I do when the function on main runs. I also know the other methods didn't work because the also didn't log a message or execute the rest of their function.

I think the problem might lie in MainPage not being created as an element with a id. Do you know what might be causing this?

like image 479
Gerharddc Avatar asked May 19 '12 19:05

Gerharddc


1 Answers

findChild doesn't look for the id but the objectName property which you can simply add inside the MainPage object (see the documentation):

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

You could also access that object through the initialPage property of the rootObject without the need to add a objectName property:

QObject * mainPage = QDeclarativeProperty(rootObject, "initialPage").object();
if (mainPage)
     QDeclarativeProperty(mainPage, "toets").write(3);
like image 157
alexisdm Avatar answered Oct 05 '22 02:10

alexisdm