在黑莓级联中使用c ++的导航窗格

时间:2013-09-12 10:05:53

标签: blackberry blackberry-10 blackberry-cascades

  1. 使用Json Web服务获取响应
  2. 当我按下按钮时,我必须在响应成功时推送到新页面,否则必须显示祝酒 - 已经注册
  3. 我会得到回复“电子邮件ID已注册”或“注册成功”
  4. 当我获得注册Suceess时,我必须推新页面
  5. 请帮忙......


    CPP文件

    ApplicationUI::ApplicationUI(bb::cascades::Application *app) :
            QObject(app)
        , m_succeeded(false)
        , m_active(false)
    {
    
        QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
            qml->setContextProperty("app", this);
            //qml->setContextProperty("second", m_pane);
    
            m_root = qml->createRootObject<AbstractPane>();
    
            m_pane = new NavigationPane;
            app->setScene(m_root);
    }
    
    void ApplicationUI::sendRequest()
    {
    
        if (m_active)
                return;
    
        m_active = true;
            emit activeChanged();
    
        m_succeeded = false;
    
    
        QNetworkAccessManager* networkAccessManager = new QNetworkAccessManager(this);
    
        QNetworkRequest request(m_urllink);
    
        QNetworkReply* reply = networkAccessManager->get(request);
    
        bool ok = connect(reply, SIGNAL(finished()), this, SLOT(onFinished()));
        Q_ASSERT(ok);
        Q_UNUSED(ok);
    }
    
    void ApplicationUI::onFinished()
    {
    
        m_succeeded = true;
    
        QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());
    
        QString response;
    
    if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200)
        {
                JsonDataAccess jda;
    
                QVariantMap map = jda.loadFromBuffer(reply->readAll()).toMap();
    
                QVariantList addresses = map["RegistrationResult"].toList();
    
                qDebug() <<"Full Result is = "<<map["RegistrationResult"].toString();
    
                QString m_temperature;
                QString result;
    
    
                result = map["RegistrationResult"].toString();
                m_temperature=result.section(':', 0, 0);
    
                m_urlResult = result;
                emit urlResultChanged();
                qDebug()<<m_urlResult;
                qDebug()<<"\n\n\n";
                if(result == "EMAIL ID ALREADY EXISTS")
                {
    
                            qDebug() << " New Registration Result is " <<m_temperature;
                            qDebug() <<map["RegistrationResult"].toString();
    
                }
    
                else if(result != "EMAIL ID ALREADY EXISTS")
                {
    
                            QString empid;
                            QString empid_no;
    
                            QString::SectionFlag flag = QString::SectionSkipEmpty;
    
                            result = map["RegistrationResult"].toString();
                            //empid=m_temperature.section(':', 1, 1);
                            empid_no = map["RegistrationResult"].toString();;
                            empid_no=empid_no.section(':', 2, 2);
                            qDebug()<<"Emd ID = "<<empid_no;
                            qDebug()<<"Company ID"<<result.section(':', 4, 4);
    
                           QmlDocument *qml = QmlDocument::create("asset:///second.qml").parent(this);
                           Page *new_Page = qml->createRootObject<Page>();
                           m_pane->push(new_Page);
                                  **?????????????????????????????**
    
                }
    

    main.qml

    import bb.cascades 1.2
    import bb.system 1.2
    import "controls"
    NavigationPane {
        id: navigation
    
    
        Page {
            titleBar: TitleBar {
                id: mainPage
                title: "ERS"
            }
    
    Container
    {
    id: mainContainer
    Button {
                    id: next
                    text: "NEXT"
                    onClicked: {
    
                        app.clickedButton(cnametxt.text,hrtxt.text,emailtxt.text,addresstxt.text,phnotxt.text,pwdtxt.text,vhclnotxt.text,vhclmodeltxt.text,urltxt.text);
                        app.sendRequest();
                        mainContainer.urlresult(); // to push page am using javascript
    
                    }
    
           }
         Label  {
                        id: urlresulttxt
                        text: app.urlResult
                        visible: app.urlResult=="EMAIL ID ALREADY EXISTS"
                        textStyle.color: Color.Red
                }     
    
          function urlresult()
                    {
                        if (app.urlResult != "EMAIL ID ALREADY EXISTS" && app.urlResult != null )
    
                        {
                            toast.body = "Success"
                            toast.show();
                            var page = nextPage.createObject();
                            navigation.push(page); 
                        }
                        else if (app.urlResult == "EMAIL ID ALREADY EXISTS") {
                            toast.body = "EMAIL ID ALREADY EXISTS"
                            toast.show();
                        }
    
           }
                    attachedObjects: [
                        ComponentDefinition {
                            id: nextPage
                            source: "second.qml"
                        },
    
                     SystemToast {
                       id: toast                
                               }
                        ]               
    
    
    
            }    //container
    }    // page
    
    
    
        } // nav    
    

1 个答案:

答案 0 :(得分:2)

试试这个:

在你的main.qml名称中,导航窗格的对象名如:

NavigationPane {
id: navigation
objectName: "mynavigation"

在您的applicationui.cpp构造函数中更改以下行:

 m_root = qml->createRootObject<AbstractPane>();

    m_pane = m_root->findChild<NavigationPane*>("mynavigation");

在构造second.qml之后也改变这些行:

   QmlDocument *qml = QmlDocument::create("asset:///second.qml").parent(this);
               qml->setContextProperty("app", this);  


Page *new_Page = qml->createRootObject<Page>();  
m_pane->push(new_Page);

CPP文件:

    ApplicationUI::ApplicationUI(bb::cascades::Application *app) :
        QObject(app)
    , m_succeeded(false)
    , m_active(false)
{

    QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
        qml->setContextProperty("app", this);
        //qml->setContextProperty("second", m_pane);

        m_root = qml->createRootObject<AbstractPane>();

       m_pane = m_root->findChild<NavigationPane*>("mynavigation"); //  changed
        app->setScene(m_root);
}

void ApplicationUI::sendRequest()
{

    if (m_active)
            return;

    m_active = true;
        emit activeChanged();

    m_succeeded = false;


    QNetworkAccessManager* networkAccessManager = new QNetworkAccessManager(this);

    QNetworkRequest request(m_urllink);

    QNetworkReply* reply = networkAccessManager->get(request);

    bool ok = connect(reply, SIGNAL(finished()), this, SLOT(onFinished()));
    Q_ASSERT(ok);
    Q_UNUSED(ok);
}

void ApplicationUI::onFinished()
{

    m_succeeded = true;

    QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());

    QString response;

if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200)
    {
            JsonDataAccess jda;

            QVariantMap map = jda.loadFromBuffer(reply->readAll()).toMap();

            QVariantList addresses = map["RegistrationResult"].toList();

            qDebug() <<"Full Result is = "<<map["RegistrationResult"].toString();

            QString m_temperature;
            QString result;


            result = map["RegistrationResult"].toString();
            m_temperature=result.section(':', 0, 0);

            m_urlResult = result;
            emit urlResultChanged();
            qDebug()<<m_urlResult;
            qDebug()<<"\n\n\n";
            if(result == "EMAIL ID ALREADY EXISTS")
            {

                        qDebug() << " New Registration Result is " <<m_temperature;
                        qDebug() <<map["RegistrationResult"].toString();

            }

            else if(result != "EMAIL ID ALREADY EXISTS")
            {

                        QString empid;
                        QString empid_no;

                        QString::SectionFlag flag = QString::SectionSkipEmpty;

                        result = map["RegistrationResult"].toString();
                        //empid=m_temperature.section(':', 1, 1);
                        empid_no = map["RegistrationResult"].toString();;
                        empid_no=empid_no.section(':', 2, 2);
                        qDebug()<<"Emd ID = "<<empid_no;
                        qDebug()<<"Company ID"<<result.section(':', 4, 4);

                       QmlDocument *qml = QmlDocument::create("asset:///second.qml").parent(this);
                         qml->setContextProperty("app", this);   // changed
                       Page *new_Page = qml->createRootObject<Page>();
                       m_pane->push(new_Page);
                              **?????????????????????????????**

            }