0

我正在使用 QML/c++ 制作一个应用程序,第一页导航窗格是用 qml 创建的。然后第二页也是qml。在第一页按下按钮时,将调用并解析第二页的 c++ 函数,并且必须推送到导航页。下面提到了我在按下按钮时所做的事情。

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 代码=1 fltno=11 ip=78f0a210(/base/usr/lib/libbbcascades.so.1@_ZNK2bb8cascades14NavigationPane7indexOfEPNS0_4PageE+0x707) mapaddr=0010a210。参考=00000010)

我正在解析指向第二个 c++ 文件构造函数的导航页面指针并将其分配给 this->navpange 变量。

我应该在第一个 c++ 文件头中公开导航窗格吗?如果是这样怎么办?

无论如何我可以从第二个 c++ 文件中获取正在运行的应用程序的活动导航窗格而不解析它?

提前致谢 :-)

我必须做导航吗

4

2 回答 2

0

从给出的代码中,我假设主页是未初始化的。

于 2013-10-08T17:08:29.080 回答
0

黑莓论坛的 Zemy 回答了我。功劳归于他。

我认为最简单的方法是将 NavigationPane 作为 QML 的参数传递:

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 回答