0

我正在开发一个 BB 10 应用程序,其中我用 C++ 编写了第一页(使用 NavigationPane)。现在我想在按钮单击时在 NavigationPane 中推送另一个 qml 页面。我试过以下代码但没有运气

QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
if (!qml->hasErrors()) {
    Page *page = qml->createRootObject<Page>();

    mRoot->push(page);

}

我怎样才能做到这一点?

4

1 回答 1

1

以下是如何NavigationPane在 C++ 中使用推送页面:

源文件:

#include <bb/cascades/Application>
#include <bb/cascades/Button>
#include <bb/cascades/Label>
#include <bb/cascades/ActionItem>
#include <bb/cascades/Container>
#include <bb/cascades/DockLayout>
#include <bb/cascades/TitleBar>
#include <bb/cascades/NavigationPaneProperties>
#include "Sandoxproject.hpp"

using namespace bb::cascades;

SandboxApp::SandboxApp(bb::cascades::Application *app)
: QObject(app)
{
    _navPane.reset(NavigationPane::create());
    Page* firstPage = createFirstPage();
    _navPane ->push(firstPage);
    _secondPage.reset(createSecondPage());
    app->setScene(_navPane.data());
}

bb::cascades::Page* SandboxApp::createFirstPage() {
    Page* page = new Page();
    Container* content = new Container();
    TitleBar* titleBar = TitleBar::create().visibility(ChromeVisibility::Visible).title("First Page");
    page->setTitleBar(titleBar);
    content->setLayout(DockLayout::create());
    Button* button = Button::create().text("Go to another page").horizontal(HorizontalAlignment::Center).vertical(VerticalAlignment::Center);
    connect(button, SIGNAL(clicked()), this, SLOT(pushPage()));
    content->add(button);
    page->setContent(content);
    return page;
}

bb::cascades::Page* SandboxApp::createSecondPage() {
    Page* page = new Page();
    TitleBar* titleBar = TitleBar::create().visibility(ChromeVisibility::Visible).title("Second Page");
    page->setTitleBar(titleBar);
    ActionItem* backAction = ActionItem::create();
    connect(backAction, SIGNAL(triggered()), _navPane.data(), SLOT(pop()));
    page->setPaneProperties(NavigationPaneProperties::create().backButton(backAction));
    Container* content = new Container();
    content->setLayout(DockLayout::create());
    content->add(Label::create().text("This is the second page").horizontal(HorizontalAlignment::Center).vertical(VerticalAlignment::Center));
    page->setContent(content);
    return page;
}

void SandboxApp::pushPage() {
    qDebug("pushing another page...");
    _navPane->push(_secondPage.data());
}

头文件:

#ifndef Sandoxproject_HPP_
#define Sandoxproject_HPP_

#include <bb/cascades/NavigationPane>
#include <bb/cascades/Page>
#include <QObject>

namespace bb { namespace cascades { class Application; }}

class SandboxApp : public QObject
{
    Q_OBJECT
public:
    SandboxApp(bb::cascades::Application *app);
    virtual ~SandboxApp() {}

private slots:
     void pushPage();

private:
    bb::cascades::Page* createFirstPage();
    bb::cascades::Page* createSecondPage();

    QScopedPointer<bb::cascades::NavigationPane> _navPane;
    QScopedPointer<bb::cascades::Page> _secondPage;

    Q_DISABLE_COPY(SandboxApp);
};


#endif /* Sandoxproject_HPP_ */
于 2013-02-28T01:11:51.537 回答