BlackBerry 10 Cascades - 如何导航到另一个CPP类

时间:2014-02-27 09:11:48

标签: c++ qt blackberry-10 blackberry-cascades

我的BlackBerry 10 Cascades应用程序中有三种不同的cpp类

  1. Home.cpp
  2. FirstPage.cpp
  3. SecondPage.cpp
  4. 主页有两个按钮,用户可以通过这两个按钮导航到其余页面。此页面还有NavigationPane,通过它我可以导航到其余页面

    FirstPage具有在QML中创建的UI,而SecondPage具有仅在C ++中创建的UI。

    如何在点击按钮时导航到这些页面。我知道有关信号和插槽机制,但不知道如何创建这些类的对象并将它们推送到导航窗格对象。

    代码段会很有帮助

1 个答案:

答案 0 :(得分:1)

您可以使用C ++创建导航窗格并在QML中实现UI。我这样做。我有一个类启动我的应用程序,并创建我的导航窗格(从qml文件加载页面)。

接下来,当您单击“Page1”按钮时,您可以从C ++调用一个方法(参见文档中如何将C ++对象公开给QML),并在C ++中启动一个新页面作为我建议的导航窗格的子窗口下面

NewPage::NewPage(QObject *parent, bb::cascades::NavigationPane *navigationPane)
     : QObject(parent)

    {
        m_parent = parent;

        m_navigationPane = navigationPane;

        m_qml = bb::cascades::QmlDocument::create("asset:///qml/UserInput/newpage.qml").parent(this);

        initUI(); //Were you should initialize all of your UI

        m_page = m_qml->createRootObject<bb::cascades::Page>();
        m_page->setObjectName("PageName");
        m_navigationPane->push(m_page);

    }

此页面在屏幕上添加了一个按钮,当您点击该按钮时,信号popFinished(bb::cascades::Page* page)就会被触发。您可以将此信号连接到主页(创建导航窗格)中的插槽,就像我所做的那样:

void MainPage::popFinished(bb::cascades::Page* page) {
    delete page;
}

很容易为每个qml文件公开一个不同的c ++对象。我使用MVC模型,对于每个qml文件,我有一个控制器和一个模型。该模型包含qml中您需要的所有属性。因此,从中央c ++对象,当我调用新的NewPage()时,我将指针发送到导航窗格,因此我可以推送页面并稍后弹出它。在这个控制器中你应该有一个模型和一个Getter,然后在你创建这样的页面之前将控制器暴露给qml:

m_qml->setContextProperty("newPageController", this);

在qml中,您可以通过名称“newPageController”访问此控制器。 qml可用的方法必须用Q_INVOKABLE实例化,请参考这个,有帮助我肯定:

http://developer.blackberry.com/native/documentation/cascades/dev/integrating_cpp_qml/

然后如果你想启动另一个页面,从c ++调用一个方法,创建页面,然后将新对象暴露给新的qml。