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
    width: 640
    height: 480
    title: qsTr("测试")

    Row{
        spacing: 10
        x:200
        y:200
        Button{
            width: 100
            height: 30
            text: qsTr("点击")
            onClicked: {
                textName.text = qmlType.ShowInfo();
            }
        }

        TextField{
            width: 100
            height: 30
            id:textName
        }

    }
}

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

猜你喜欢

转载自www.cnblogs.com/QingYiShouJiuRen/p/11548365.html