2017-10-19 8 views
1

Salut les gars, j'ai besoin de prendre le texte de TextField QML, puis passer à QString en C++.comment passer le texte TextField de QString en C++?

Firstpage.qml:

Component { 

    id: mainView 

    Row { 

     Image { 
      id: logo 
      anchors.fill: parent 
      source: "Imagens/jscalcadosLogo.png" 
     } 

     ColumnLayout { 
      id: layoutLogin 
      anchors.centerIn: parent 
      anchors.margins: 3 
      spacing: 3 

      TextField { 
       id: login 
       objectName: "login" 
       Layout.fillWidth: true 
       placeholderText: "Username" 

      } 

Main.cpp:

int main(int argc, char *argv[]){ 

QGuiApplication app(argc, argv); 
QQmlApplicationEngine engine; 
engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 

QQuickView *view = new QQuickView; 
view->setSource(QUrl::fromLocalFile("FirstPage.qml")); 
QObject *object = view->rootObject(); 
QObject *textin = object->findChild<QObject*>("login"); 
//QString input = textin->Property("text").toString(); // crash the program 

return app.exec(); 
} 

Lorsque je tente de convertir textIn en QString le plantage du programme

une idée? Je suis désolé pour mon mauvais anglais.

Répondre

5

La règle générale est: Ne pas lire ou écrire quelque chose dans QML de C++

Au lieu de cela, vous devrez créer un QObject exemple en C++ dérivée de qui a une propriété pour ce texte. Vous exposez ce QObject à QML, en le définissant comme une propriété de contexte ou en l'enregistrant comme un singleton.

Ensuite, dans QML vous définissez la propriété susmentionnée - et voila - vous avez poussé le texte du monde QML vers le C++. Il existe différentes questions sur StackOverflow concernant l'interaction de C++ et QML (je pourrais les rechercher plus tard, et probablement marquer votre question comme doublon, car je suis sûr que votre question n'est pas la première).

Aussi le documentation a plus d'informations à ce sujet.

+0

"La règle générale est: ne pas lire ou écrire quelque chose dans QML de C++" mais j'ai besoin d'utiliser cette connexion parce que j'utilise Mysql en C++ pour se connecter avec mon application QML. j'ai besoin de passer ce QObject à QString, une idée? –

+1

@ CésarAugusto Créez une classe qui hérite de QObject où vos méthodes sont chargées de faire la procédure requise, dans votre cas, interagissez avec la base de données et exposez-la à QML en utilisant une propriété de contexte ou singleton, puis utilisez cette tâche sur la QML côté qui exécutent le code implémenté sur le côté C++. – eyllanesc