gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:12 28 4
gpt4 key购买 nike

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

  1. 首页.cpp
  2. FirstPage.cpp
  3. 第二页.cpp

主页有两个按钮,用户可以通过它们导航到其他页面。此页面还有 NavigationPane,我可以通过它导航到其余页面

FirstPage 具有使用 QML 创建的 UI,而 SecondPage 具有仅使用 C++ 创建的 UI。

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

代码片段会有帮助

最佳答案

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

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

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)。您可以像我所做的那样将此信号连接到主页中的插槽(您创建导航 Pane 的位置):

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

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

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

在 qml 中,您可以通过名称“newPageController”访问此 Controller 。 qml 可用的方法必须用 Q_INVOKABLE 实例化,请引用这个,我相信会有所帮助:

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

然后,如果您想启动另一个页面,从 C++ 调用一个方法,创建页面,然后将新对象公开给新的 qml。

关于c++ - BlackBerry 10 Cascades - 如何导航到另一个 CPP 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22063855/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com