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) //貌似只能这么用
3304

被折叠的 条评论
为什么被折叠?



