2017-10-19 2 views
1

Hallo Leute, ich brauche den Text von TextField QML dann an QString in C++ übergeben.wie übergeben Sie TextField Text von QString in 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(); 
} 

Wenn ich textIn versuchen wandeln das Programmabsturz QString

irgendeine Idee? Es tut mir leid für mein schlechtes Englisch.

Antwort

5

Die allgemeine Regel lautet: Sie lesen oder etwas nicht in QML von C++

Statt schreiben, müssen Sie eine QObject abgeleitete Instanz in C++ erstellen, die eine Immobilie zu diesem Text hat. Sie geben das QObject für QML frei, indem Sie es entweder als Kontexteigenschaft festlegen oder es als Singleton registrieren.

Dann in QML setzen Sie oben genannte Eigenschaft - et voilà - Sie haben den Text aus der QML Welt in dem C++ geschoben.

Es gibt verschiedene Fragen zu StackOverflow in Bezug auf die Interaktion von C++ und QML (ich könnte später nach ihnen suchen, und wahrscheinlich Ihre Frage als doppelt kennzeichnen, denn ich bin mir sicher, dass Ihre Frage nicht die erste ist).

Auch die documentation hat weitere Informationen zu diesem Thema.

+0

„Die allgemeine Regel lautet: Verwenden Sie von C etwas in QML schreiben ++ nicht lesen oder“ aber ich brauche diese Verbindung zu verwenden, weil ich Mysql versuchen in C++ verwenden, mit meiner QML App zu verbinden und die „Dokumentation“ ist nicht klar. Ich muss dieses QObject zu QString übergeben, irgendeine Idee? –

+1

@ CésarAugusto Erstellen Sie eine Klasse, die von QObject erbt, wobei Ihre Methoden für die von Ihnen benötigte Prozedur verantwortlich sind, in Ihrem Fall mit der Datenbank interagieren und QML mit einer Context-Eigenschaft oder Singleton verfügbar machen und diese Aufgabe dann auf der QML verwenden Seite, die den auf der C++ - Seite implementierten Code ausführt. – eyllanesc

Verwandte Themen