Hola, tenemos la respuesta a tu pregunta, deslízate y la hallarás más abajo.
Solución:
Deberías usar Conexiones en este caso (tal vez es la única forma de conectarse).
-
Pon tu objeto miObj al archivo QML por
setContextProperty
qmlVectorForm->rootContext()->setContextProperty("YourObject", myOb);
-
tu señal es
finishedGatheringDataForItem(QString signalString)
-
En el archivo QML, agregue los Me gusta de Connectios a continuación:
Connections target: YourObject onFinishedGatheringDataForItem: qmlString = signalString
Creo que sería mejor si revisas este tutorial:
http://doc.qt.io/qt-4.8/qtbinding.html
especialmente esta sección:
http://doc.qt.io/qt-4.8/qtbinding.html#recepción-de-señales
Creo que su error en este caso podría ser que no lo declaró como un espacio o que no lo hizo invocable. Ambas opciones se explican en el Tutorial de Qt.
Además, debe usar una QVariant para intercambiar datos entre C++ y QML. También puede registrar tipos, por ejemplo, Widgets y demás, para poder usarlos en QML como un tipo “nativo” como un rectángulo. En la mayoría de los casos, esto no se recomienda, excepto si necesita cierta clase externa o algunos datos que no puede mostrar de otra manera en su interfaz QML.
El motivo de QVariant es el enfoque basado en scripts de QML. El QVariant básicamente contiene sus datos y una descripción del tipo de datos, para que el QML sepa cómo manejarlos correctamente. Es por eso que debe especificar el parámetro en QML con String, int, etc. Pero el intercambio de datos original con C ++ sigue siendo una QVariant
He usado qmlRegisterType antes, pero es una solución muy inconveniente para tipos de datos simples. Se usa más bien para datos más complejos, como widgets personalizados, lienzos o elementos de video que QML no admite de forma nativa ni se extiende. QStandardItemModels
. Es una forma más conveniente de intercambiar datos entre QML y C++ y no necesita Signals o Slots en primera instancia, porque QStandardItemModel actualiza la GUI automáticamente. Para usar QStandardItemModel, debe registrar el Tipo con qmlRegisterType.. . El modelo se puede usar en vistas basadas en modelos, como ListView, etc.
Adjunté un tutorial para este tema, describe cómo usar QListModel.
http://doc.qt.io/qt-4.8/qdeclarativemodels.html
Solución sin Connections
y cualquier contexto es conectando no señal-ranura, sino señal-señal. Encontrado aquí. El código de ejemplo es el siguiente.
qml:
Window
signal qmlSend(string textOut)
signal qmlReceive(string textIn)
onQmlReceive:
console.log(textIn)
El archivo de encabezado de la clase de fondo contiene
public signals:
void cppSend(QString textOut);
public slots:
void cppReceive(QString textIn);
Y main.cpp los conecta de esta manera:
1.De qml a cpp:
QObject::connect(qmlRootObject, SIGNAL(qmlSend(QString)),
backgroundObject, SLOT(cppReceive(QString)));
2.De cpp a qml:
QObject::connect(backgroundObject, SIGNAL(cppSend(QString)),
qmlRootObject, SIGNAL(qmlReceive(QString)));
Sección de Reseñas y Valoraciones
Recuerda que te damos el privilegio agregar una reseña si te fue de ayuda.