2012-11-02 18 views
5

Ich versuche, eine andere QML-Seite aus meinem C++ - Code durch Klicken in den geklickt() -Slot einer Schaltfläche in meiner QML, aber es funktioniert nicht.Wie reagiere ich auf eine QML-Schaltfläche klicken in C++

Button { 
     objectName: btnLogin 
     text: qsTr("Login") 
     id: btnLogin 
    } 

und die C++

QObject *newButton = root->findChild<QObject*>("btnLogin"); 
QObject::connect(newButton, SIGNAL(clicked()), this, SLOT(loginClick())); 

Die Schlitze in meiner HPP-Datei:

public slots: 
    void loginClick(); 

Und mein geklickt Methode:

void GConnectBB::loginClick() { 
    int i = 0; 

    Button *newButton = root->findChild<Button*>("btnLogin"); 
    if (newButton) 
     newButton->setProperty("text", "New button text"); 
} 


QObject *newButton = root->findChild<QObject*>("btnLogin"); 

ist null, wenn ich das überprüfen durch Debugger. Ich bin extrem rostig mit C++ und völlig neu in Qt, bitte sei sanft :) Was könnte ich falsch machen?

+0

Ist das nicht eine schlechte Praxis (Zugang UI-Elemente von C++) in Betracht gezogen? Ich habe versucht, selbst zu lernen, wie ich meine C++ - Objekt-Methode mit einem qml-Objekt-Signal verbinden kann ... –

+0

@JoaoMilasch Ja, das ist es. Dies war nur ein Beispiel. Das primäre Ziel war, dass der C++ Code auf den Button-Klick reagiert. – Tjaart

Antwort

8

Sie sollten den Objektnamen mit Anführungszeichen umgeben:

Button { 
    objectName: "btnLogin" 
    ... 
    ... 
} 
+2

Ich denke, dieser Fehler kommt von der Tatsache, dass die ID-Eigenschaft keine Anführungszeichen hat. –