2012-11-02 21 views
5

Sto provando a lanciare una pagina QML diversa dal mio codice C++ agganciando lo slot cliccato() di un pulsante nel mio QML ma non funziona.Come reagire a un pulsante QML fare clic su C++

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

E il C++

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

Gli slot a mio file hpp:

public slots: 
    void loginClick(); 

E il mio metodo cliccato:

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"); 

è nullo quando controllo attraverso la debugger. Sono estremamente arrugginito con C++ e completamente nuovo a Qt, per favore sii gentile :) Cosa potrei fare di sbagliato?

+0

Is not questo considerata una cattiva pratica (elementi dell'interfaccia utente di accesso da C++)? Ho cercato di imparare come collegare il mio metodo dell'oggetto C++ a un segnale di oggetto qml ... –

+0

@JoaoMilasch sì, lo è. Questo era solo un esempio. L'obiettivo principale era ottenere che il codice C++ reagisse al clic del pulsante. – Tjaart

risposta

8

Si dovrebbe circondare il nome dell'oggetto tra virgolette:

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

Immagino che questo errore derivi dal fatto che la proprietà id non ha virgolette. –