• QML与C++集成


    QML与C++集成

    QML应用经常要处理一些更高级和性能敏感的以C++ 中处理的任务。处理这个场景最常用和最快的方法是将继承自QObject的,且带有实现的 C++ 类暴露给QML运行时。假定你装了Qt 5.7 或更高版本,以下一步一步的操作将教给你在QML中使用BackEnd这一C++ 类的过程。
    1、在Qt Creator中使用"Qt Quick Application" 模板来创建一个新的工程

    2、为工程添加名为BackEnd的新的C++ 类,并替换头文件内容:

    #ifndef BACKEND_H
    #define BACKEND_H
    
    #include <QObject>
    #include <QString>
    #include <qqml.h>
    
    class BackEnd : public QObject
    {
        Q_OBJECT
        Q_PROPERTY(QString userName READ userName WRITE setUserName NOTIFY userNameChanged)
        QML_ELEMENT
    
    public:
        explicit BackEnd(QObject *parent = nullptr);
    
        QString userName();
        void setUserName(const QString &userName);
    
    signals:
        void userNameChanged();
    
    private:
        QString m_userName;
    };
    
    #endif // BACKEND_H

    Q_PROPERTY宏声明了一个可以从QML访问的属性。宏QML_ELEMENT使得类BackEnd 可以在QML中访问。

    3、在工程文件中添加以下几行:

    CONFIG += qmltypes
    QML_IMPORT_NAME = io.qt.examples.backend
    QML_IMPORT_MAJOR_VERSION = 1

    BackEnd将自动注册为可在QML中访问类型,但需要导入URL:"io.qt.examples.backend 1.0"。

    4、替换backend.cpp内容:

    #include "backend.h"
    
    BackEnd::BackEnd(QObject *parent) :
        QObject(parent)
    {
    }
    
    QString BackEnd::userName()
    {
        return m_userName;
    }
    
    void BackEnd::setUserName(const QString &userName)
    {
        if (userName == m_userName)
            return;
    
        m_userName = userName;
        emit userNameChanged();
    }

    每当m_userName的值改变时,setUserName函数发出userNameChanged信号。这个信号可以被在QML中的onUserNameChanged函数来处理。

    5、用以下内容替换main.qml中的代码 :

    import QtQuick 2.6
    import QtQuick.Controls 2.0
    import io.qt.examples.backend 1.0
    
    ApplicationWindow {
        id: root
        width: 300
        height: 480
        visible: true
    
        BackEnd {
            id: backend
        }
    
        TextField {
            text: backend.userName
            placeholderText: qsTr("User name")
            anchors.centerIn: parent
    
            onEditingFinished: backend.userName = text
        }
    }

    当TextField的文本改变时,BackEnd实例允许访问userName属性,以改变其值。
    现在程序可以运行了.

    Qt 提供几种方法来集成C++ 和QML,本文中所讨论的只是其中一种。更多方法,可以参考QML与C++ 集成概览

  • 相关阅读:
    新手silverlight练习五子棋( 二 )
    VS注释模板工具
    NET简介
    MS Sql server 总结(命令恢复)
    Highcharts入门(一)
    jqGrid入门(1)
    WIN7常见问题汇总
    log4net入门
    DLL管理工具
    C++回顾1 简介
  • 原文地址:https://www.cnblogs.com/sammy621/p/16227465.html
Copyright © 2020-2023  润新知