How to emit signal with variable as reference from qml to c++
-
Hi there.
I came up with a quick example that does what you want but with strings instead. Should follow the same concept for objects.
main.qml
@import QtQuick 2.0Item {
width: 800
height: 600
signal listSignal(var list)property variant stringList: ["one", "two", "three"] Timer { interval: 2000 onTriggered: listSignal(stringList) running: true }
}
@
main.cpp
@#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include "signalcatcher.h"int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);QtQuick2ApplicationViewer viewer; viewer.setMainQmlFile(QStringLiteral("qml/Testing/main.qml")); viewer.showExpanded(); SignalCatcher signalCatcher(viewer.rootObject()); return app.exec();
}
@signalcatcher.h
@#ifndef SIGNALCATCHER_H
#define SIGNALCATCHER_H#include <QObject>
#include <QVariant>class QQuickItem;
class SignalCatcher : public QObject
{
Q_OBJECTpublic:
SignalCatcher(QQuickItem *rootItem, QObject *parent = NULL);private slots:
void processList(const QVariant &var);
};#endif // SIGNALCATCHER_H
@signalcatcher.cpp
@#include <QQuickItem>
#include "signalcatcher.h"SignalCatcher::SignalCatcher(QQuickItem *rootItem, QObject *parent)
: QObject(parent)
{
connect(rootItem, SIGNAL(listSignal(QVariant)), this, SLOT(processList(QVariant)));
}void SignalCatcher::processList(const QVariant &var)
{
QStringList list = var.toStringList();
for(int i = 0; i < list.size(); i++)
{
qDebug(list[i].toStdString().c_str());
}
}
@