Saltar al contenido

Señal C++ a la ranura QML en Qt

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).

  1. Pon tu objeto miObj al archivo QML por setContextProperty

    qmlVectorForm->rootContext()->setContextProperty("YourObject", myOb);
    
  2. tu señal es

    finishedGatheringDataForItem(QString signalString)
    
  3. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *