0

QML/c++ でアプリを作成しています。最初のページのナビゲーション ペインは qml で作成されます。次に、2 ページ目も qml です。最初のページのボタンを押すと、c++ 関数が呼び出されて 2 番目のページが解析され、ナビゲーション ページにプッシュする必要があります。ボタンを押して私がしていることは以下に述べられています。

QmlDocument *qml = QmlDocument::create("asset:///home.qml");
    if (!qml->hasErrors()) {
        Page *homepage = qml->createRootObject<Page>();
        if (homepage) {
            qDebug() <<"created a homepage";
            navPane->push(homepage);
        }}

ただし、プッシュが完了すると、アプリケーションは自動的に終了し、エラーが発生します。

コンソール出力は(ホームページを作成しました

プロセス 304619722 (Sampleapp2) が SIGSEGV code=1 fltno=11 ip=78f0a210(/base/usr/lib/libbbcascades.so.1@_ZNK2bb8cascades14NavigationPane7indexOfEPNS0_4PageE+0x707) mapaddr=0010a210 を終了しました。ref=00000010 )

ナビゲーション ページ ポインターを 2 番目の C++ ファイル コンストラクターに解析し、それを this->navpange 変数に割り当てています。

最初の C++ ファイル ヘッダーでナビゲーション ウィンドウを公開する必要がありますか? もしそうなら、それを行う方法は?

とにかく、解析せずに2番目のC++ファイルから実行中のアプリのアクティブなナビゲーションペインを取得できますか?

前もって感謝します :-)

ナビゲーションを作成する必要がありますか

4

2 に答える 2

0

blackberry フォーラムの Zemy が答えてくれました。クレジットは彼に行きます。

QML から NavigationPane をパラメーターとして渡すのが最も簡単だと思います。

Q_INVOKABLE void function(NavigationPane *pane);
...
pane->push(homepage);

QML では:

_app.function(navPaneId)

しかし、これはエラーになりました。Zemyは再びそれを修正しました。

これを再現しようとしましたが、同じエラーメッセージも表示されました。NavigationPane が Cascades に正しく登録されていないようです。

qmlRegisterType() を追加すると修正されました:

ApplicationUI::ApplicationUI(bb::cascades::Application *app) :
        QObject(app)
{
    // prepare the localization
    m_pTranslator = new QTranslator(this);
    m_pLocaleHandler = new LocaleHandler(this);
    if(!QObject::connect(m_pLocaleHandler, SIGNAL(systemLanguageChanged()), this, SLOT(onSystemLanguageChanged()))) {
        // This is an abnormal situation! Something went wrong!
        // Add own code to recover here
        qWarning() << "Recovering from a failed connect()";
    }
    // initial load
    onSystemLanguageChanged();

    //--------------------------------------
    qmlRegisterType<NavigationPane>(); <---------------- ADDED
    //--------------------------------------

    // Create scene document from main.qml asset, the parent is set
    // to ensure the document gets destroyed properly at shut down.
    QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
    qml->setContextProperty("_app", this);

    // Create root object for the UI
    AbstractPane *root = qml->createRootObject<AbstractPane>();

    // Set created root object as the application scene
    app->setScene(root);
}
于 2013-10-09T14:05:26.687 に答える