QML Signal an C++ Slot
Verfasst: 6. Juni 2014 17:09
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
control.h und .cpp Ausschnitt
die qml datei
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
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();
}
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);
}
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
}
}
}
Beste Grüße
MrCrank