2016-01-20 7 views
2

Je développe de nouvelles applications BlackBerry et c'est très difficile pour moi de comprendre comment cela fonctionne car la façon de développer pour BB diffère beaucoup de développement Android ou iOS.L'interface utilisateur ne répond pas à l'extérieur ApplicationUI

Voici mon problème: J'ai créé un registerPage.qml et un registerPageController (avec ses fichiers .hpp et .cpp). Je voudrais que l'application commence avec le registerPage.qml et appelle le formulaire qml certaines méthodes que j'ai écrites dans le fichier. Cpp.

Si je crée le document qml en dehors de ApplicationUI(), la page est affichée correctement, mais les boutons ne répondent pas.

Je pense que le code est facile à comprendre:

applicationui.cpp

ApplicationUI::ApplicationUI() : QObject() 
{ 
    m_pTranslator = new QTranslator(this); 
    m_pLocaleHandler = new LocaleHandler(this); 

    bool res = QObject::connect(m_pLocaleHandler, SIGNAL(systemLanguageChanged()), this, SLOT(onSystemLanguageChanged())); 
    Q_ASSERT(res); 
    Q_UNUSED(res); 

    onSystemLanguageChanged(); 

    // --> OPTION 1 (what I want) <-- 
    /* If I init the register page here, the page is 
     displayed ok, but buttons does not respond. 
     The RegisterPage initialization code is below. */ 
    // RegisterPage registerPage; 

    // --> OPTION 2 <-- 
    /* If I create the registerPage here, buttons respond 
     but the _register param is not setted properly*/ 
     QmlDocument *qml = QmlDocument::create("asset:///registerPage.qml").parent(this); 
     qml->setContextProperty("_register", this); 

     AbstractPane *root = qml->createRootObject<AbstractPane>(); 
     Application::instance()->setScene(root); 
} 

registerPage.hpp

class RegisterPage: public QObject 
{ 
    Q_OBJECT 
public: 
    RegisterPage(); 
    virtual ~RegisterPage() {} 

    Q_INVOKABLE void initRegistration(); 
}; 

registerPage.cpp

RegisterPage::RegisterPage() 
{ 
    /* With this initialization, buttons does not respond!!*/ 
    QmlDocument *qml = QmlDocument::create("asset:///registerPage.qml").parent(this); 
    qml->setContextProperty("_register", this); 

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


    // Set created root object as the application scene 
    Application::instance()->setScene(root); 
} 

void RegisterPage::initRegistration() 
{ 
    qDebug() << "start registration!"; 
} 

registerPage. qml 0 Comment puis-je charger un fichier qml, l'associer à un fichier .cpp et appeler des fonctions depuis qml? Pourquoi les boutons ne répondent pas?

Merci beaucoup, et désolé si c'est la base du développement de BlackBerry, mais cela me rend fou.

----------------

ÉDITÉE

Enfin grâce à @Filip Hazubski pour me aider à trouver la solution finale.

Dans applicationui.cpp

QmlDocument *qml = QmlDocument::create("asset:///registerPage.qml").parent(this); 
AbstractPane *root = qml->createRootObject<AbstractPane>(); 

RegisterPage* registerPage = new RegisterPage(this, root); 
qml->setContextProperty("_register", registerPage); 

Application::instance()->setScene(root); 

et registerPage.cpp

RegisterPage::RegisterPage(QObject *parent, AbstractPane *root) : QObject(parent) 
{ 
    phoneTextField = root->findChild<TextField*>("phoneTextField"); 
} 

Passer le AbstractPane que nous pouvons trouver param les éléments QML dans le registerPage.cpp.

Merci!

Répondre

2

Je ne suis pas sûr mais peut-être que ma réponse vous aidera.

Dans applicationui.cpp au lieu de:

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

AbstractPane *root = qml->createRootObject<AbstractPane>(); 
Application::instance()->setScene(root); 

essayer:

QmlDocument *qml = QmlDocument::create("asset:///registerPage.qml").parent(this); 
AbstractPane *root = qml->createRootObject<AbstractPane>(); 

RegisterPage* registerPage = new RegisterPage(this); 
qml->setContextProperty("_register", registerPage); 

Application::instance()->setScene(root); 

et registerPage.HPP

RegisterPage(); 

changement

RegisterPage(QObject *parent = 0); 

et registerPage.cpp changement

RegisterPage::RegisterPage() 
{ 
    /* With this initialization, buttons does not respond!!*/ 
    QmlDocument *qml = QmlDocument::create("asset:///registerPage.qml").parent(this); 
    qml->setContextProperty("_register", this); 

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


    // Set created root object as the application scene 
    Application::instance()->setScene(root); 
} 

à

RegisterPage::RegisterPage(QObject *parent) : QObject(parent) 
{ 
} 
+0

Oui, je l'ai essayé aussi, mais w Lorsque j'essaie d'appeler une méthode de RegisterPage à partir du fichier qml, le programme se bloque. Merci pour votre réponse! – kemmitorz

+0

@kemmitorz Je vais essayer de l'améliorer. –

+0

@kemmitorz Pas de problème. Je serais heureux d'aider. Essayez ma solution maintenant. Peut-être que maintenant ça va marcher. –