Hi all,

I'm trying to create a Page in C++ and set it as the current page in a 
PageStack. So far I have tried a lot of different approaches, but none 
of them work.

I have a main.qml which I set on a QDeclarativeView. The QML file 
contains this:

Window {
     id: window
     objectName: "mainWindow"
     PageStack {
         id: pageStack
         objectName: "pageStack"
         anchors.fill: parent
     }
}

This is a bit simplified, but I have checked that the behaviour is the 
same with this simple file.

I create a Page object with the pageStack as parentItem and a Text 
object with the page as parentItem in C++. It looks like the 
pageStack.replace works correctly, but the text object doesn't show.

The Page object is instantiated with this code:

static const QString qml =
     "import QtQuick 1.0\n"
     "import com.nokia.symbian 1.0\n"
     "Page {\n"
     "    id: %1\n"
     "    objectName: \"%1\"\n"
     "    function setPage() {\n"
     "        parent.replace(%1)\n"
     "    }\n"
     "}";

{
     ...
     mComponent = new QDeclarativeComponent(engine);

     const QString qmlDeclaration = ::qml.arg(mObjectID);
     mComponent->setData(qmlDeclaration.toUtf8(), QUrl());

     mItem = qobject_cast<QDeclarativeItem*>(mComponent->create());
}

The parent is set with this:

void Displayable::setParentItem(QDeclarativeItem* parent) {
     mItem->setParentItem(parent);
     mItem->setProperty("anchors.fill", "parent");
}

The page creation is done by giving it the text object to add:

   QMLPage* page = new QMLPage;
   textObject->setParentItem(page);

   QDeclarativeItem* pageStack =
     QMLView::getInstance()->rootObject()->
       findChild<QDeclarativeItem*>("pageStack");
   Q_ASSERT(pageStack);

   // This is the Window element from main.qml
   QDeclarativeItem* window = pageStack->parentItem();
   Q_ASSERT(window);

   page->setParentItem(pageStack);

   // Call the function from the page declaration
   QMetaObject::invokeMethod(page->item(), "setPage");

This runs without errors, but the screen is empty. If the Window just 
has a Rectangle and I add the text object to that (by setting the 
rectangle as the text parentItem), the text shows. But if I try this 
with the Page (with the text in the page), nothing shows up.

Any ideas?

If there are simpler ways to do what I'm working on, I'd love to hear 
about it. This UI is completely dynamic, so I can't have anything in the 
qml files, it has to be done in C++. With widget based Qt code, this is 
trivial. But QML is certainly not great for this type of application.

Bo Thorsen,
Fionia Software.

-- 

Expert Qt and C++ developer for hire
Contact me if you need expert Qt help
http://www.fioniasoftware.dk
_______________________________________________
Qt-qml mailing list
[email protected]
http://lists.qt.nokia.com/mailman/listinfo/qt-qml

Reply via email to