目前我知道有两种方式:、
1.前期准备:(主要的为了能在QML中使用C++类)具体怎么连接不在这里讲述。
假设一个C++类 Media,有个信号
media_sigPos(int pos);进行实例化,得到 pMedia。
再到main.cpp那里,进行
- // pMedia是实例化Media的指针
...
pctx->setContextProperty("mediaCtrl", pMedia);
...
这样之后,就可以在QML中通过mediaCtrl去操作Media类了。下面介绍绑定信号的方法。
方法一:
在Media.h中:主要就是理解
Q_PROPERTY这个宏。Q_PROPERTY()是一个宏,用来在一个类中声明一个属性property,由于该宏是qt特有的,需要用moc进行编译,故必须继承于QObject类- ...
Q_PROPERTY(int mediaPos
READ getMediaPos
Notify media_sigPos(int pos))
int getMediaPos(); // 读取属性值的函数
...
上面的意思是:
media_sigPos信号来时,系统会通过函数getMediaPos去取值,从而赋值给mediaPos。再到QML中进行处理:
- ......
property int nMediaPos:mediaCtrl.mediaPos // 进行绑定
onNMediaPosChanged:{
// 处理信号
}
......
这里相当于将mediaCtrl.mediaPos与nMediaPos进行了绑定, mediaCtrl.mediaPos变化了就可以调用
onNMediaPosChanged了。 方法2:这个比较直接
在QML中
- ......
Connections{
target:mediaCtrl // 目标对象
onMedia_sigPos:{
// 这里就相当于接受到了那个信号了,可以进行处理
if(3 == pos) // 可以直接这么使用参数pos, media_sigPos(int pos);
{
}
}
}
......