Conceptos básicos rápidos de QML y Qt

1. Qué son Qt C++, QML y Qt Quick, sus diferencias y conexiones

Qt C++, QML, Qt Quick son tecnologías diferentes en el marco de Qt, Qt C++ es la tecnología que se usa para implementar la lógica y los datos, mientras que QML y Qt Quick son tecnologías que se usan para crear GUI, pueden funcionar entre sí o usarse solos. Según diferentes necesidades y escenarios, los desarrolladores pueden elegir la tecnología adecuada para desarrollar aplicaciones Qt;

  • Qt C ++ es un marco de aplicación basado en C ++, que proporciona una serie de bibliotecas de clase C ++ para GUI, comunicación en red, acceso a bases de datos, procesamiento multimedia y otras funciones. Qt C ++ también admite sistema de metaobjetos, mecanismo de señal y ranura, características tales como arquitectura de vista de modelo, las ventajas de Qt C++ incluyen alto rendimiento, estabilidad, compatibilidad, etc.;
  • Qt Modeling Language (QML) es un lenguaje declarativo para crear GUI dinámicas. QML usa sintaxis de estilo JSON, que puede definir las propiedades, el diseño, el comportamiento, la animación, etc. de los elementos de la interfaz de usuario. QML también se puede usar con C++ u otros lenguajes Interacción, para lograr la lógica y el procesamiento de datos, las ventajas de QML incluyen simplicidad, flexibilidad, reutilización, etc.;
  • Qt Quick es un marco de aplicación basado en QML que proporciona una serie de tipos de QML para crear interfaces gráficas de usuario de alto rendimiento, fluidas y receptivas. Qt Quick incluye multiplataforma, fácil expansión, rica documentación y ejemplos, etc.;

Paso 1: Instalar Qt

Para usar QML y Qt Quick, primero debe instalar Qt. La última versión de Qt Creator puede descargarse del sitio web de Qt o instalarse con su administrador de paquetes. Una vez instalado, abra Qt Creator y cree un nuevo proyecto.

Paso 2: Crea el archivo QML

Para crear un archivo QML en Qt, haga clic derecho en "Otros archivos" en el árbol del proyecto y seleccione "Archivo QML". Esto agregará un archivo llamado "main.qml" al proyecto. En este archivo QML, puede agregar páginas de interfaz de usuario y algunos elementos interactivos, como botones, cuadros de texto, etc. Aquí hay un ejemplo simple:

import QtQuick 2.0

Rectangle {
    width: 200
    height: 200
    color: "blue"

    Text {
        text: "Hello World!"
        anchors.centerIn: parent
        font.pixelSize: 36
    }
}

En este ejemplo, importamos el módulo Qt Quick y definimos un elemento rectangular. Dentro del rectángulo, agregamos un elemento de texto que mostrará "¡Hola mundo!" en el centro del rectángulo. Cuando ejecute este archivo QML, debería ver un rectángulo azul con el texto "¡Hola mundo!" en el centro.

Paso 3: Integra archivos QML con C++

Ahora que hemos creado con éxito un archivo QML simple, el siguiente paso es integrarlo con C++. Para esto necesitamos crear un objeto C++ y hacerlo disponible en el contexto QML. Aquí hay un ejemplo:

#include <QObject>
#include <QString>

class Person : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString name READ getName WRITE setName NOTIFY nameChanged)

public:
    explicit Person(QObject *parent = nullptr) : QObject(parent) {}

    QString getName() const { return m_name; }
    void setName(const QString &name) {
        if (m_name != name) {
            m_name = name;
            emit nameChanged();
        }
    }

signals:
    void nameChanged();

private:
    QString m_name;
};

En este ejemplo, definimos una clase llamada "Persona", que hereda de la clase QObject. También definimos una propiedad (a saber, "nombre") usando la macro Q_PROPERTY, que se puede usar en QML. Esto nos permitirá acceder y modificar esta propiedad desde código QML. Por ejemplo, aquí se explica cómo usar esta clase en QML:

import QtQuick 2.0

Rectangle {
    width: 200
    height: 200
    color: "blue"

    Text {
        text: person.name
        anchors.centerIn: parent
        font.pixelSize: 36
    }

    Person {
        id: person
        name: "John Doe"
    }
}

En este ejemplo, creamos un nuevo objeto Person y lo pasamos a QML como objeto de contexto. En el código QML, podemos acceder a las propiedades del objeto al igual que los objetos de JavaScript. En este caso, usamos "persona.nombre" para mostrar la propiedad de nombre del objeto Persona.

Paso 4: llamar a la función QML en C++

Otro ejemplo interesante es llamar a funciones QML desde código C++. Aquí hay un ejemplo:

// main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QObject>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    QObject* rootObject = engine.rootObjects().first();
    QMetaObject::invokeMethod(rootObject, "showMessage",
                              Q_ARG(QString, "Hello from C++"));

    return app.exec();
}

En este ejemplo, hemos llamado a una función llamada "showMessage" desde código C++ usando la función invocarMethod() de la clase QMetaObject. Esta función se implementa en el archivo QML:

import QtQuick 2.0

Rectangle {
    width: 200
    height: 200
    color: "blue"

    Text {
        text: "Hello World!"
        anchors.centerIn: parent
        font.pixelSize: 36
    }

    function showMessage(msg) {
        console.log(msg)
        message.text = msg
    }

    Text {
        id: message
        text: "No message yet"
        anchors.bottom: parent.bottom
        anchors.horizontalCenter: parent.horizontalCenter
    }
}

En este ejemplo, definimos una función llamada "showMessage" que imprime un mensaje y lo muestra en la interfaz de usuario. En el código de C++, llamamos a esta función mediante la función invocarMethod() y pasamos "Hola desde C++" como parámetro. Cuando ejecutamos este ejemplo, se muestra un mensaje en la parte inferior de la interfaz de usuario, "Hola desde C++".

Resumen: este artículo presenta los conceptos básicos de QML y Qt Quick y lo ayuda a comprenderlos mejor a través de varios códigos de muestra de C++;

Supongo que te gusta

Origin blog.csdn.net/qq_33867131/article/details/130270266
Recomendado
Clasificación