zoukankan      html  css  js  c++  java
  • QML如何与C++交互

    大家都知道,QML作为构建界面的语言是非常简洁的,但是界面的后台有些时候是经常要与C++交互的,那么这个时候,如何与C++进行交互就尤为重要了,在这里就需要用到

    template<typename T>
    int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);这个模板函数,它是在QML系统中注册名为qmlName的C++类型文件

    uri:这个参数类似于C++中的命名空间,如果不知道如何使用,没关系,下面的实例中会展示如何使用。

    versionMajor:主版本号。

    versionMinor:次版本号。

    qmlName:C++文件在QML中的类名,需要注意的是这个类名首字母必须要大写,不然会报错。

    接下来就看看如何操作的吧

    .h

    #ifndef QMLTYPE
    #define QMLTYPE
    
    #include <QObject>
    
    class QmlType:public QObject
    {
        Q_OBJECT
    
    public:
        QmlType();
        Q_INVOKABLE QString ShowInfo();
    };
    
    #endif // QMLTYPE

    .cpp

    #include "qmltype.h"
    
    QmlType::QmlType()
    {
    
    }
    
    QString QmlType::ShowInfo()
    {
        return tr("Hello World");
    }

    需要注意的是如果函数想要在QML中被调用,那么此类必须继承于QObject,另外需要在函数的开头添加Q_INVOKABLE关键字。

    接下来就是如何向QML中注册C++文件了。

    #include <QApplication>
    #include <QQmlApplicationEngine>
    #include <QtQml>
    #include "qmltype.h"
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        qmlRegisterType<QmlType>("com.type.QmlType", 1, 0, "Type");
    
        QQmlApplicationEngine engine;
        QmlType qmlType;
        engine.rootContext()->setContextProperty("qmlType", &qmlType);
        engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    
        return app.exec();
    }

    qml文件

    import QtQuick 2.3
    import QtQuick.Controls 1.2
    import com.type.QmlType 1.0
    
    ApplicationWindow {
        visible: true
         640
        height: 480
        title: qsTr("测试")
    
        Row{
            spacing: 10
            x:200
            y:200
            Button{
                 100
                height: 30
                text: qsTr("点击")
                onClicked: {
                    textName.text = qmlType.ShowInfo();
                }
            }
    
            TextField{
                 100
                height: 30
                id:textName
            }
    
        }
    }

    在QML中要把注册的url:com.type.QmlType导入进去,那么接下来接下来就可以正常操作C++文件了。操作演示如下:

  • 相关阅读:
    RStudio 的使用
    R 语言文件读写
    R 语言文件读写
    matlab 编程的细节问题
    matlab 编程的细节问题
    matlab 图像分块及恢复
    matlab 图像分块及恢复
    matlab 高级函数 —— colfilt/blockproc (图像)矩阵的分块处理
    结构体/类中的弹性数组---元素个数为0的数组
    28.uva 10891 Game of Sum 记忆化dp
  • 原文地址:https://www.cnblogs.com/QingYiShouJiuRen/p/11548365.html
Copyright © 2011-2022 走看看