• 5395阅读
  • 7回复

[提问]event的一个疑问 [复制链接]

上一主题 下一主题
离线bkey
 

只看楼主 倒序阅读 楼主  发表于: 2013-01-16

void mousePressEvent(QMouseEvent *event);  
void mouseMoveEvent(QMouseEvent *event);    
void mouseReleaseEvent(QMouseEvent *event);    

bool eventFilter ( QObject * obj, QEvent * event ) ;

例如我要实现用鼠标移动一个图片,以上函数在实现功能上有什么区别?


离线kimtaikee

只看该作者 1楼 发表于: 2013-01-17
1. 在 mousePressEvent 中你可以判断是否点击了图片方可移动图片。
2. 在 mouseMoveEvent中只有你点击了图片的情况下图片才会跟着鼠标移动。
3. 在 mouseReleaseEvent中你将pressed 设置为false,不然图片会一直随着鼠标移动。

离线bkey

只看该作者 2楼 发表于: 2013-01-17
回 1楼(kimtaikee) 的帖子
我是想问这个 eventFilter  和另外三个有什么区别,在eventFilter中也可以实现另外三个的功能
离线jdwx

只看该作者 3楼 发表于: 2013-01-17
用 eventFilter远没有那三个函数方便,因为获取鼠标的状态费劲。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线kimtaikee

只看该作者 4楼 发表于: 2013-01-17
eventFilter 要在于那三个函数之前处理事件,在eventFilter中处理事件时它判断是那种事件类型然后在分发给对应的事件处理函数

  1. bool SomeObject::eventFilter(QObject* obj,QEvent* e) {
  2.        switch(e->type()) {
  3.          ...
  4.          case QEvent::MousePress:
  5.                 mousePressEvent(static_cast<QMouseEvent*>(e));
  6.                 break;
  7.           case QEvent::MouseMove:
  8.                 mouseMoveEvent(static_cast<QMouseEvent*>(e));
  9.                 break;
  10.            case QEvent::MouseRelease:
  11.                  mouseReleaseEvent(static_cast<QMouseEvent*>(e));
  12.                  break;
  13.              ....
  14.       }
  15.       return true;
  16. }




离线kimtaikee

只看该作者 5楼 发表于: 2013-01-17
回 3楼(jdwx) 的帖子
状态可以根据事件类型来判断,位置可以通过下面的方法得到:
  1. static_cast<QHelpEvent*>(event)->globalPos()

离线bkey

只看该作者 6楼 发表于: 2013-01-17
回 4楼(kimtaikee) 的帖子
也就是说可以在mousePress这些函数中处理的工作,就在这里处理比较好吧
离线kimtaikee

只看该作者 7楼 发表于: 2013-01-17
回 6楼(bkey) 的帖子
是的.

快速回复
限100 字节
 
上一个 下一个