QML如何與C++交互

你們都知道,QML做爲構建界面的語言是很是簡潔的,可是界面的後臺有些時候是常常要與C++交互的,那麼這個時候,如何與C++進行交互就尤其重要了,在這裏就須要用到app

template<typename T>
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);這個模板函數,它是在QML系統中註冊名爲qmlName的C++類型文件函數

uri:這個參數相似於C++中的命名空間,若是不知道如何使用,不要緊,下面的實例中會展現如何使用。測試

versionMajor:主版本號。ui

versionMinor:次版本號。url

qmlName:C++文件在QML中的類名,須要注意的是這個類名首字母必需要大寫,否則會報錯。spa

接下來就看看如何操做的吧code

.hblog

#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關鍵字。ci

接下來就是如何向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++文件了。操做演示以下:

相關文章
相關標籤/搜索