Ich versuche, eine Liste von QML nach C++ zu senden. Ich habe versucht, mit einem String und einer ganzen Zahl mit Erfolg, aber wenn ich mit einem QVariant versuchen bekomme ich den Fehler:QVariant von QML an C++ übergeben
QObject::connect: No such slot MyClass::cppSlot(QVariant) in ../test_2206/main.cpp:31
Meine main.qml
import QtQuick 2.4
import QtQuick.Layouts 1.1
import Material.ListItems 0.1 as ListItem
import Material.Extras 0.1
import QtQuick.Controls 1.3 as QuickControls
import QtQuick.Controls 1.4
import Material 0.2
Window {
visible: true
property var listCloud: ["nuage1", "nuage2", "nuage3", "nuage4"]
id: item
width: 100; height: 100
signal qmlSignal(variant msg)
/* MouseArea {
anchors.fill: parent
onClicked: item.qmlSignal("Hello from QML")
}*/
Rectangle{
id:sousRect
color:"red"
width:100; height:100
Button{
id:buttonTest
onClicked: {
item.qmlSignal(listCloud)
}
}
}
}
Mein main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlProperty>
#include <QQmlComponent>
#include <QDebug>
#include "myclass.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QQmlComponent component(&engine, QUrl(QStringLiteral("qrc:/main.qml")));
QObject *object = component.create();
MyClass myClass;
QObject::connect(object, SIGNAL(qmlSignal(QVariant)),
&myClass, SLOT(cppSlot(QVariant)));
return app.exec();
}
Mein MyClass.h
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QDebug>
#include <QString>
#include <QList>
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = 0);
signals:
public slots:
void cppSlot(QVariant &msg);
};
#endif // MYCLASS_H
Meine MyClass.cpp
#include "myclass.h"
MyClass::MyClass(QObject *parent):
QObject(parent)
{
}
void MyClass::cppSlot(QVariant &msg){
qDebug() << "c++: bien reçu chef " << msg;
}
Ich verstehe nicht, warum ich nicht einen QVariant Parameter in diesem Signal setzen. Jede Hilfe ist willkommen :)
Haben Sie versucht, mit var (anstelle von Variante): Der Variant-Typ ist ein generischer Eigenschaftstyp. Es ist veraltet und existiert nur, um alte Anwendungen zu unterstützen; Neue Anwendungen sollten stattdessen var type-Eigenschaften verwenden. – RvdK
Wollen Sie auch explizit Variante verwenden? listCloud ist eine Liste mit Strings, also würde QStringList auch funktionieren. – RvdK
Ich möchte Variante verwenden, weil ich Liste der Zeichenfolge aber auch Liste des Objekts übergeben muss. Du denkst ich sollte 'property var listCloud' anstelle von' property vairant listCloud' schreiben? – Cam