QML--将C++的类注册到QML中使用方法二

这里以使用engine.rootContext()->setContextProperty 函数接口,操作步骤如下

① 首先定义好自己的 Test 的class类

class Test : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
    Q_PROPERTY(int year READ year WRITE setYear NOTIFY yearChanged)

    QString m_name;
    int m_year;

public:
    explicit Test(QObject *parent = nullptr);

    const QString &name() const;
    void setName(const QString &newName);

    const int &year() const;
    void setYear(const int &newYear);

    //add Invokable to send signal
    Q_INVOKABLE void sendSignal();

signals:

    void nameChanged();
    void yearChanged();

    void cppSignalA();  //no parameter
    void cppSignalB(const QString &str, int value); //with parameter

public slots:
    void cppSlotA();  //slot function with no parameter
    void cppSlotB(const QString &str, int value); //slot function with parameter


};

② 在main.cpp中添加如下代码

engine.rootContext()->setContextProperty("Greeting", 
						QObject::tr("Hello QML from C++"));
CPlusPlusClass  *cplusplusclass = new CPlusPlusClass();
engine.rootContext()->setContextProperty("CPlusPlusClass", cplusplusclass);
cplusplusclass->setDisplay("Display test");

③ 在QML中使用注册好的C++资源

Text {
	id: idTextDisplay
	anchors.centerIn: parent
	text: CPlusPlusClass.display

	font.family: "Helvetica"
	font.pointSize: 24
	font.bold: true
	color: "red"
}

MouseArea{
	property int year: 2021
	anchors.fill: parent
	acceptedButtons: Qt.LeftButton | Qt.RightButton

	//test left button right button
	onClicked: {
		if(mouse.button == Qt.LeftButton){
			console.log('----qml left button: cpp send signal')
			idTest.name = "TestObj"
			idTest.year = year++
			idTest.sendSignal()
			CPlusPlusClass.setDisplay(year.toString())

		}else{
			console.log('----qml right button: qml send signal')
			idRoot.qmlSignalA()
			idRoot.qmlSignalB('TestObj', 202111)

		}
	}
}

这里的 CPlusPlusClass.display 和 CPlusPlusClass.setDisplay(year.toString()) 就是调用的在C++注册的资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值