2017-05-30 4 views
0

QML-Code:Anruf Dialog von CPP (C++) auf QML in QT Mobile File (iOS und Android)

Dialog { 
    id: dialog 
    objectName: dialog 
    modal: true 
    standardButtons: Dialog.cancel | Dialog.Ok 

    title: qsTr("About") 

    Label { 
     text: "Lorem ipsum..." 
    } 
} 

CPP

void LoginPage::checkLogin(QString username, QString password) 
{ 
    if(username == "username" && password == "password") 
    { 

    } 
    else 
    { 
     QObject *rect = findChild<QObject*>("dialog"); 
     //this solution don't work 
    } 
} 

I-Dialog von CPP aufrufen müssen, suchte ich im Internet aber ich habe keine Lösungen gefunden. Mein Ziel ist offen Dialogfehler von CPP-Datei. Irgendwelche Ideen?

+0

Sicher, Sie versuchen, Kind der 'LoginPage' Instanz zu suchen. Sie sollten root Element der QML-Struktur und so durch seine Kinder suchen. – folibis

+0

Zweitens, ich denke, Sie sollten den 'objectName' zwischen Anführungszeichen in qml setzen:' objectName: "dialog" ' – m7913d

+0

Warum nicht Signale und Slots verwenden? Vielleicht ein Signal wie loginFailed() auf der C++ Seite ausgeben. Innerhalb von QML können Sie dann Connections {target: loginPage; onLoginFailed: console.log ("Meh")}. – Dinesh

Antwort

0

Verfügbare Ansätze sind sehr gut beschrieben here. Die nächstgelegene Version von dem, was Sie fragen, ist, dass Sie ein Root-Objekt und findChild mit objectName, die in QML-Deklaration festgelegt haben müssen. Nachdem Sie es erhalten haben, ändern Sie Eigenschaften, die Sie möchten, z. visible und usw.

Aber das sieht nicht wie ein sauberer Ansatz aus, da Sie das Root-Element haben müssen, müssen Sie den Dialog vordefinieren und ihn ausblenden.

Ich würde empfehlen, a context property mit einigen Elementeigenschaften zu registrieren und diese Eigenschaften zu ändern, um QML-Logik, z. zeige den diaglog oder nicht.

Noch sauberer Ansatz, der für Sie anwendbar sein könnte, ist die Validierung direkt in QML.

+0

Ich habe Ihren Link, aber ich nicht die objektähnliche Methode in der Verknüpfung aufrufen, kann ich keine Bibliothek in cpp einfügen –

+0

Was bedeutet Bibliothek in cpp? Grundsätzlich müssen Sie Zugriff auf die Root-Komponente haben, um Eigenschaften und/oder Aufruffunktionen auf ihren untergeordneten Elementen zu ändern. – Yuki