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来修饰成员函数,目的在于被修饰的成员函数能够被元对象系统所唤起。

使用步骤

  1. C++类:方法的声明+实现
  2. main.cpp里注册
  3. 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*/)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值