chongyong的个人主页

http://www.qtcn.org/bbs/u/184854  [收藏] [复制]

chongyong

  • 1

    关注

  • 0

    粉丝

  • 2

    访客

  • 等级:新手上路
  • 总积分:12
  • 男,1994-06-21

最后登录:2018-06-09

更多资料

日志

C++中信号与QML中进行绑定

2017-09-25 11:00
目前我知道有两种方式:、
1.前期准备:(主要的为了能在QML中使用C++类)具体怎么连接不在这里讲述。
假设一个C++类 Media,有个信号media_sigPos(int pos);
进行实例化,得到 pMedia。
再到main.cpp那里,进行
  1. // pMedia是实例化Media的指针
    ...
    pctx->setContextProperty("mediaCtrl", pMedia);
    ...
这样之后,就可以在QML中通过mediaCtrl去操作Media类了。下面介绍绑定信号的方法。

方法一:
在Media.h中:主要就是理解Q_PROPERTY这个宏。
Q_PROPERTY()是一个宏,用来在一个类中声明一个属性property,由于该宏是qt特有的,需要用moc进行编译,故必须继承于QObject类
  1. ...
    Q_PROPERTY(int mediaPos
    READ getMediaPos
    Notify media_sigPos(int pos))
    int getMediaPos();  // 读取属性值的函数
    ...

上面的意思是: media_sigPos信号来时,系统会通过函数getMediaPos去取值,从而赋值给mediaPos。
再到QML中进行处理:
  1. ......
    property int nMediaPos:mediaCtrl.mediaPos // 进行绑定
    onNMediaPosChanged:{
      // 处理信号
    }
    ......
这里相当于将mediaCtrl.mediaPos与nMediaPos进行了绑定, mediaCtrl.mediaPos变化了就可以调用onNMediaPosChanged了。

方法2:这个比较直接
在QML中
  1. ......
    Connections{
      target:mediaCtrl  //  目标对象
      onMedia_sigPos:{
        // 这里就相当于接受到了那个信号了,可以进行处理
        if(3 == pos) // 可以直接这么使用参数pos, media_sigPos(int pos);
        {
        }
      }
    }
    ......



分类:默认分类|回复:0|浏览:740|全站可见|转载
 

Powered by phpwind v8.7 Certificate Copyright Time now is:04-26 03:21
©2005-2016 QTCN开发网 版权所有 Gzip disabled