【QT Quick】QML与C++交互

Q_INVOKABLE

说明

使用Q_INVOKABLE宏定义来修饰成员函数,目的在于被修饰的成员函数能够被元对象系统所唤起。

方法一

.h文件

Q_INVOKABLE void bindWindow(int x,int y,int w,int h);

.cpp文件:
正常书写C++代码

main.cpp文件:
需包含头文件:#include <QQmlContext>
包含类头文件时,如果此类代码放置于其他文件夹,则头文件需要加上文件夹名:#include "OtherSource/m_setwindow.h"

auto root_context = engine.rootContext();
    root_context->setContextProperty("$mwind",&wind);

.qml文件

Button {
            id: treasure
            text: qsTr("珍宝")
            font.bold: true
            font.pointSize: 20
            width: parent.width
            height:parent.width

            Image {
                id: zb_btn
                source: "../Image/LB.png"
                width: parent.width
                height: parent.height
                opacity: 0.3

            }
			//点击鼠标调用
            onClicked: $mwind.bindWindow(parent.parent.x,
                                         parent.parent.y,
                                         parent.parent.width,
                                         parent.parent.height)
        }

方法二

.h文件中用Q_INVOKABLE修饰完成员函数后;
main.cpp

qmlRegisterType<ProConModel>("an.qt.ProConModel",1,0,"ProConModel");

main.qml
直接使用id可以调用被Q_INVOKABLE修饰过的公开或者保护的成员函数;

import an.qt.ProConModel 1.0

ProConModel{id:cxx_PCM}
    Component.onCompleted: {
        cxx_PCM.mPrintf()
    }

信号与槽

1.使用方法一
2.cpp中定义一个信号void signalPrintf(QString);
3.Q_INVOKABLE void mPrintf();该函数在UI界面调用时,会打印字符串的同时抛出一个信号;

void Sqlite::mPrintf()
{
    QString str("打印测试");
    emit signalPrintf(str);
    qDebug()<<str;
}

4.qml中写法,让程序一运行就将信号与槽函数绑定;

    function slotPrintf(str){
        text_Del.text = str
    }
 
    Component.onCompleted: {
        $DB.signalPrintf.connect(slotPrintf)
    }

5.当点击创建按钮时,调用第3步函数并打印打印测试

        Button{//创建
            width: 60
            height: 30
            Text {
                text: qsTr("创建")
                font.bold: true
                font.pointSize: 10
                anchors.centerIn: parent
            }
            onClicked: {
                $DB.mPrintf()
            }
        }

6.同时qml的槽函数会被执行并更改删除按钮的text文本;
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非西昂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值