我的BlackBerry 10 Cascades应用程序中有三种不同的cpp类
主页有两个按钮,用户可以通过这两个按钮导航到其余页面。此页面还有NavigationPane,通过它我可以导航到其余页面
FirstPage具有在QML中创建的UI,而SecondPage具有仅在C ++中创建的UI。
如何在点击按钮时导航到这些页面。我知道有关信号和插槽机制,但不知道如何创建这些类的对象并将它们推送到导航窗格对象。
代码段会很有帮助
答案 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。