QML与C++交互

QML的开发初衷是为了更好的描绘界面,以便实现软件的逻辑和绘图的分离,但Qt开发小组显然在这点上非常不照顾用户,尽管QML绘图的文章一大把,但是逻辑和绘图交互的部分资料不仅难找,而且比较杂,这无疑给想用C++写逻辑,QML绘图,主打安卓等移动平台的开发者带来巨大的灾难。同时Digia在推出Qt5后,对QML进行了不少修改,原有的Qt4资料很多已经成废品,所以还是必须整理一份新的C++&QML的设计模式嘀~


1. 在QML使用C++对象

①首先得把C++对象注入到QML的Viewer里面去
#include <QQmlEngine>
#include <QQmlContext>
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QtQuick2ApplicationViewer viewer;
    MyObject *item=new MyObject;
    viewer.engine()->rootContext()->setContextProperty("MyObj",item);
}
这样所有通过Viewer的QML文件都可以访问这个C++对象了。

②想要调用C++对象的函数,只有俩种方式,一个是声明函数的类型前面加上Q_INVOKABLE宏(作用是添加跨线程访问权限,- -#) 另一种是把函数设为槽函数(了解Qt多线程的朋友可能知道,槽函数默认就有跨线程访问的权限)

Q_INVOKABLE void changeValue(int x);
//MyObj.changeValue(3) 旧版资料里会有这种写法,Qt5中是不行的,函数调用必须由QML触发,蛋疼,跪求大神指导。
onClicked:MyObj.changeValue(3) //貌似只能这么用

这里可能有朋友照葫芦画瓢了,把成员变量打上Q_INVOKABLE宏不就能在QML里访问了吗?呵呵,这是行不通的。想要访问C++变量的方法目前也只有俩个,一种是写个函数来访问/修改变量,另一种是在外部把对象的成员变量注入到Viewr里面去(比较蛋疼,慎用)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值