QML Signal an C++ Slot

Verschiedenes zu Qt
Antworten
Mr.Crank
Beiträge: 38
Registriert: 16. April 2013 15:21

QML Signal an C++ Slot

Beitrag von Mr.Crank »

Tach zusammen,

ich weiß man findet zu dem Thema einiges, aber keines der Tipps/Lösungen hat mir weiter geholfen.
Also zu meinem Problem, ich habe ein Projekt aus QML (Frontend) und C++(Backend) diese beiden
Sprachen möchte ich über die Signals und Slots der jeweiligen Klasse verheiraten.
Die App lässt sich ohne Fehler durchkompelieren, wirft im process_stub jedoch folgede Meldung aus

QObject::connect: No such signal QquickRectangle_QML_21::qmlSignal(QString) in main.cpp 41

zum Code:
main.cpp

Code: Alles auswählen

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

    QtQuick2ApplicationViewer viewer;


    /**************AB HIER TEST c++ QML *******************/
    control data;

   // viewer.rootContext()->setContextProperty("myData", &data);

    viewer.setMainQmlFile(QStringLiteral("qml/sLoading/main.qml"));

    //Verbindung von C++ über Signal Slots nach QML
    //QString msg = "Dieser Text kommt von c++"; //Unser C++ Text
    //emit data.setMyText(msg); //<-- Hier wird das Signal setlabeltext von MyClass gesendet

    //Verbindung von QML über Signal Slots nach C++
    QObject* viewerobject = dynamic_cast<QObject*>(viewer.rootObject());
    QObject::connect(viewerobject,SIGNAL(qmlSignal(QString)),&data,SLOT(signalToSend(QString)));  //Macht Probleme


    viewer.showExpanded();

    return app.exec();
}
control.h und .cpp Ausschnitt

Code: Alles auswählen

class control:public QObject
{
    Q_OBJECT
public:
    control(QObject *parent = 0);

public slots:
    //Slots welche durch die QML Oberfläche aufgerufen werden
      void signalToSend(QString); 

//Aus der .cpp
void control::signalToSend(QString signalName)
{
    qDebug() << QString("Called the C++ slot with message:%1").arg(signalName);
}
die qml datei

Code: Alles auswählen

Item
{
    id: mainAbout                                                       // Vergeben der ID dieses Items
    signal qmlSignal(string msg)
    .
    .
    .
                    MouseArea
                    {
                        // Jeder Komponente wird eine Mausbereich zugewiesen
                        anchors.fill: parent                            // Es wird auf der gesamten Fläche der Komponente angebracht
                        onClicked: {                                       // Wenn auf diesem Bereich geklickt wird, wird nachfolgende Swicth-Case Abfrage abgearbeitet
                            switch (number)                             // Je nach dem welche number vorliegt werden verschiedene States ausgeführt
                            {
                                case 0: mainAbout.state = "DeveloperInfoOpen"           // Es wird die "Developer Info" aufgerufen
                                        qmlSignal("ich bin vom Mars")//Signal wird emittiert
                                        break
                                case 1: main.state = "viewDeviceScreen"                 // Der Anwender wird auf den "Device Screen" weiter geführt
                                        break
                                default:                                                // Bei defautl wird die Abfrage direkt beendet
                                        break
                            }
                        }
                    }
Ich hoffe ihr könnt mir weiterhelfen, bin für jede Anregung oder jeden Codevorschlag dankbar, stehe momentan echt aufn Schlauch

Beste Grüße
MrCrank
Mr.Crank
Beiträge: 38
Registriert: 16. April 2013 15:21

Re: QML Signal an C++ Slot

Beitrag von Mr.Crank »

Problem gelöst, signal war im falschem QML Object deklariert. Es funktioniert nun
Antworten