你們都知道,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++文件了。操做演示以下: