Qt - gewusst Wie: ausführen eines C++ - Funktion, wenn QML-button geklickt? Mit QQmlApplicationEngine

myclass.h

#ifndef MYCLASS_H
#define MYCLASS_H

#include <QDebug>
#include <QObject>

class MyClass : public QObject
{
public:
    MyClass();

public slots:
    void buttonClicked();
    void buttonClicked(QString &in);
};

#endif //MYCLASS_H

myclass.cpp

#include "myclass.h"

MyClass::MyClass()
{
}

void MyClass::buttonClicked()
{
    //Do Something
}

void MyClass::buttonClicked(QString &in)
{
    qDebug() << in;
}

main.cpp

#include <QApplication>
#include <QQmlApplicationEngine>
#include <myclass.h>
#include <QQmlContext>

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

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:///main.qml")));

    MyClass myClass;  //A class containing my functions

    //Trying to "SetContextProperty" as I saw people do it to achieve C++/QML connection
    QQmlContext * context = new QQmlContext(engine.rootContext());
    context->setContextProperty("_myClass", &myClass);

    return app.exec();
}

Ich möchte eine Funktion in myClass Klasse, die einen QString parameter, wenn eine QML-Schaltfläche geklickt wird ..

Wenn ich kompilieren & laufen .. es geht alles reibungslos.
Aber wenn ich auf den Knopf .. es zeigt diese Fehlermeldung in den debugger:

qrc:///main.qml:80: ReferenceError: _myClass ist nicht definiert

~> "Zeile 80 in meinem QML-Datei":

74:    MouseArea {
75:        id: mouseArea1
76:        anchors.fill: parent
77:        hoverEnabled: true;
78:        onEntered: { rectangle1.border.width = 2 }
79:        onExited: { rectangle1.border.width = 1 }
80:        onClicked: _myClass.buttonClicked("Worked?")
81:    }

EDIT: ( Wie für die Fehler, die das kompilieren Fehler )

Als @Jairo vorgeschlagen, alle Klassen müssen erbt von QObject.

Immer noch auf der Suche nach einer Lösung für mein Hauptproblem.

  • Was sind die Fehler, die es gibt?
  • Sorry budd, ich habe es bearbeitet die Frage, & Hinzugefügt; alle notwendigen Informationen.
  • Komm... du auch nicht erwähnt, welche Zeile gibt den Fehler, noch haben Sie Ihre Klasse... Der Fehler muss aus Ihrer Klasse.
  • Ist MyClass basierend auf der QObject-Klasse?
  • Yup, das ist es! myclass erbt von QObject. Aber auch das löst nicht das Hauptproblem, leider .. Wie kann ich den code ändern um es möglich zu machen verwenden Sie eine C++ - Funktion ( myClass.buttonClicked(QString) ) von QML wie: [ _myClass.buttonClicked("JJJ") ]? Vielen Dank 🙂
  • Ich will, dass jemand mir hilft, die Migration von QQmlApplicationEngine zu QDeclarativeView oder QtQuickView, das Hauptziel zu erreichen ( mit Hilfe eines C++ - Funktion, wenn ein QML-button angeklickt wird ). 🙂
  • Oh sorry, ich schrieb die Frage mit (myClass) - alias, um es einfacher für andere Menschen zu geben, die eine verallgemeinerte Lösung. Bearbeitet
  • Kein problem. Allerdings ist die Frage noch fehlt, welche Fehler Sie bekommen. Da gibt es keine Antworten für deinen aktuellen code, damit ungültig, könnte man genauso gut den code aktualisieren, um die neueste version (mit Q_OBJECT etc), erklären, was ist falsch mit ihm (zB. welche genaue Fehlermeldung, die Sie bekommen).
  • Alles ist geschrieben in der die Frage ist nun :]
  • Eigentlich nicht, _ ist okay, wie ich gesehen habe, eine Menge Leute nutzen es. Aber um sicher zu sein, habe ich entfernt, es & probiert .. funktioniert Nicht, gleiche Fehlermeldung myClass ist nicht definiert.

Schreibe einen Kommentar