zu fangen Ich lerne Qt mit C++.Nicht in der Lage, das emittierte Signal in QML von Qt C++
Kürzlich habe ich versucht, ein Signal von C++ zu senden und basierend auf dieser Ereignisänderung habe ich versucht, etwas in QML
zu aktualisieren. Die emit
funktioniert nicht. In der Tat Debugging der Code sagt mir, dass die Zeile des Codes knapp über der emit
und nach der emit
hat funktioniert. Aber emit
selbst funktioniert nicht.
Nach meinem Verständnis bis jetzt, Sie emit
ein Signal von C++ und on
+ signal name
sind im Innern der QML
verwendet, um dieses Ereignis zuzugreifen.
Was mache ich hier falsch? Hier
ist die vereinfachte Version des Problems:
emitsignal.h
#ifndef EMITSIGNAL_H
#define EMITSIGNAL_H
#include <QObject>
class EmitSignal : public QObject
{
Q_OBJECT
public:
explicit EmitSignal(QObject *parent = nullptr);
int add(int, int);
signals:
void mySignal();
public slots:
};
#endif // EMITSIGNAL_H
emitsignal.cpp
#include "emitsignal.h"
#include <QDebug>
EmitSignal::EmitSignal(QObject *parent) : QObject(parent) {}
int EmitSignal::add(int x, int y)
{
int z = x + y;
qDebug() << z;
emit mySignal();
return x + y;
}
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "emitsignal.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
qmlRegisterType<EmitSignal>("com", 1, 0, "EmitSignal");
EmitSignal em;
em.add(1,2);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
main.qml
import QtQuick 2.8
import QtQuick.Window 2.2
import com 1.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
EmitSignal {
id: emitSignal
onMySignal: console.log('Inside the function')
}
}
Ich mache die Objekterstellung innerhalb der Klasse und nicht im Haupt (In meiner Anwendung), also gibt es keine Möglichkeit, eine Engine zu erstellen und sie von ouside of main zu laden. Oder gibt es eine Arbeit? – Circuitdude
Ich verstehe dich nicht, erkläre dich besser. Hat meine Antwort in Ihrer Frage geholfen? Wenn du mir noch eine Frage stellen willst, kannst du mir aber zuerst sagen, ob es für dich funktioniert hat, und wenn du es getan hast, bitte, markiere es als korrekt. – eyllanesc
Ihre Klasse implementiert ein Singleton? – eyllanesc