Conectar funcionalidad C++ con la interfaz QML

Desde QML puede acceder a cada "propiedad" definida en su funcionalidad ó código C++. El código QML final de acceso quedará:

Backend.introductionText

Otra forma de nombrar funcionalidad en otro ejemplo distinto podría ser:

Users.list

1. Añade el siguiente código a un nuevo archivo (KDevelop > File > New) y guardalo en tu aplicación MauiKit en myapp/src/code/backend.h:

#pragma once

#include <QObject>
#include <QDebug>

class Backend : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString introductionText READ introductionText WRITE setIntroductionText NOTIFY introductionTextChanged)

public:
    explicit Backend(QObject *parent = nullptr);

public:
    QString introductionText() const;
    void setIntroductionText(const QString &introductionText);
    Q_SIGNAL void introductionTextChanged();

private:
    QString m_introductionText;

private slots:
    void on_IntroductionTextChanged();
};

2. Añade la implementación a un nuevo archivo en myapp/src/code/backend.cpp:

3. Añade en main.cpp:

#include "backend.h"

4. Añade en main.cpp, justo después de la línea "QQmlApplicationEngine engine;":

5. Añade en myapp/src/CMakeLists.txt:

No se confunda con myapp/CMakeLists.txt

El archivo correcto es myapp/src/CMakeLists.txt

6. Añada en el fichero qml en el que quiera acceder a la funcionalidad C++ el siguiente código.

Para establecer la conexión entre la funcionalidad C++ y la interfaz QML:

Para leer y escribir:

En el siguiente ejemplo se añade a main.qml:

Pasar múltiples datos en una sola propiedad desde código C++ a la interfaz QML: QVariantList.

En el siguiente ejemplo se crea la propiedad "users" conteniendo "name", "surname", "active" y "age". La propiedad "users" será leída y escrita desde QML.

1. Sustituya el paso 1 y añada a myapp/src/code/backend.h

2. Sustituya el paso 2 y añada a myapp/src/code/backend.cpp

En una programación más realista sería parecido a esto:

3. Sustituya el paso 6 y añada a main.qml:

Para leer desde C++ el objeto QVariantList "users" y acceder a la información de cada usuario puede usar el siguiente código donde desee. En este caso en la función de respuesta a usuario cambiado:

La salida de consola de KDevelop muestra (iniciar ejecución pulsando click sobre botón Debug):

Invocar funciones C++ desde QML.

La macro Q_INVOKABLE permite invocar una función C++ desde código de interfaz QML.

1. Añade en myapp/src/code/backend.h:

2. Añade en myapp/src/code/backend.cpp:

3. Añade en main.qml:

Last updated