Cara mendorong halaman QML pada klik tombol dalam kode C++

Saya sedang mengembangkan satu aplikasi BB 10 yang telah saya kodekan halaman pertama (dengan NavigationPane) di C++. Sekarang saya ingin mendorong halaman qml lain di NavigationPane dengan mengklik tombol. Saya telah mencoba kode berikut tetapi tidak berhasil

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

    mRoot->push(page);

}

Bagaimana saya bisa mencapainya?


person silwar    schedule 26.02.2013    source sumber
comment
Apa isi main.qml Anda? Bukankah seharusnya Anda memuat halaman Anda dari file lain?   -  person Dielson Sales    schedule 26.02.2013
comment
main.qml memiliki Halaman dengan beberapa tombol di dalamnya   -  person silwar    schedule 27.02.2013
comment
apakah tabpane/panel navigasi mRoot Anda?   -  person pranavjayadev    schedule 27.02.2013
comment
ya mRoot adalah objek NavigationPane   -  person silwar    schedule 27.02.2013
comment
sulit untuk mengatakan apa yang terjadi tanpa log kesalahan dan kode sumber lengkap, tapi silakan temukan kode yang berfungsi pada jawaban di bawah   -  person Sunseeker    schedule 28.02.2013


Jawaban (1)


Inilah cara Anda mendorong halaman menggunakan NavigationPane di C++:

Sumber data:

#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());
}

Berkas tajuk:

#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_ */
person Sunseeker    schedule 28.02.2013