C++ Class For QML : Q_INVOKABLE
Q_INVOKABLE
定义情况
#define Q_INVOKABLE QT_ANNOTATE_FUNCTION(qt_invokable)
#define QT_ANNOTATE_FUNCTION(x)
功能说明
Q_INVOKABLE在$QTDIR/src/corelib/kernel/qobjectdefs.h 中,简单被define,目的在于让moc识别。
使用Q_INVOKABLE来修饰成员函数,目的在于被修饰的成员函数能够被元对象系统所唤起。
使用步骤
- C++类:方法的声明+实现
- main.cpp里注册
- qml里:引入注册的对象+对象实例化
C++方法的声明与实现
**exp : **
定义
#ifndef _RET_INFO_H_
#define _RET_INFO_H_
#include <QObject.h>
class CRetInfo : public QObject
{
Q_OBJECT
public :
CRetInfo(QObject *parent = nullptr);
~CRetInfo();
public :
Q_INVOKABLE QString retInfo();
};
#endif // _RET_INFO_H_
实现
#include "retInfo.h"
CRetInfo::CRetInfo(QObject *parent)
: QObject(parent)
{
}
CRetInfo::~CRetInfo()
{
}
QString CRetInfo::retInfo()
{
return QString("[%1 : %2] i come from C++ Q_INVOKABLE").arg(__func__).arg(__LINE__);
}
main函数里注册
#include "retInfo.h"
...........
int main(int argc, char *argv[])
{
....................
qmlRegisterType<CRetInfo>("na.qt.cretinfo", 1, 0, "CRetInfo");
....................
}
qml里:引入注册的对象+对象实例化
import QtQuick 2.8
import QtQuick.Window 2.2
import na.qt.cretinfo 1.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
CRetInfo {
id : iRetInfo
}
MainForm {
anchors.fill: parent
mouseArea.onClicked: {
console.log(iRetInfo.retInfo())
}
}
}
注意
对应信息要匹配:
qmlRegisterType<CRetInfo>("na.qt.cretinfo", 1, 0, "CRetInfo");
import na.qt.cretinfo 1.0
CRetInfo {
id : iRetInfo
}
QML 访问C++类的成员方法也可以通过将要访问的方法声明为(或可在前面加 Q_INVOKABLE
关键字) :
public slots :
void cppSlot(/*args*/);
signals :
void cppSignal(/*args*/)