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