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!
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
@kemmitorz Je vais essayer de l'améliorer. –
@kemmitorz Pas de problème. Je serais heureux d'aider. Essayez ma solution maintenant. Peut-être que maintenant ça va marcher. –