• 4896阅读
  • 1回复

[提问]对一个QGraphicsView安装消息过滤器,监视MouseMoveEvent,为什么失败 [复制链接]

上一主题 下一主题
离线zooood
 
只看楼主 倒序阅读 楼主  发表于: 2012-03-23
纠结了两天了,求指教

我想要在子视图中移动鼠标,而能够在父窗口中捕获鼠标坐标信息

于是我在父窗口中实例化了一个视图(QGraphicsView),然后给它安装了一个eventFilter,
eventFilter在父窗口中。

但是结果显示,父窗口的eventFilter能够接受到滚轮事件,但接收不到移动、单击、双击事件

代码简化如下:
  1. Widget::Widget(QWidget *parent) :
  2. QWidget(parent),
  3. ui(new Ui::Widget)
  4. {
  5.     ui->setupUi(this);
  6.     setGeometry(10,10,500,500);
  7.     view = new QGraphicsView(this);
  8.     view->setGeometry(0,0,500,450);
  9.     view->installEventFilter(this);
  10.     view->setMouseTracking(true);
  11. }
  12. bool Widget::eventFilter(QObject *watched, QEvent *event)
  13. {
  14.     if ( watched == view )
  15.     {
  16.         qDebug() << "Event Type Number = " << (int)(event->type());
  17.         if ( event->type() == QEvent::MouseMove )
  18.         {
  19.             QPoint pos = (static_cast<QMouseEvent *>(event))->pos();
  20.             qDebug() << pos.x() << pos.y();
  21.             return true;
  22.         }
  23.     }
  24.     return false;
  25. }
  26. Widget::~Widget()
  27. {
  28.     delete ui;
  29. }


这是qDebug部分输出结果:
  1. Event Type Number = 31
  2. Event Type Number = 31
  3. Event Type Number = 31
  4. Event Type Number = 31
  5. Event Type Number = 5
  6. 190 0
  7. Event Type Number = 11
  8. Event Type Number = 10
  9. Event Type Number = 5
  10. 192 0
  11. Event Type Number = 11
  12. Event Type Number = 25
  13. Event Type Number = 9
  14. Event Type Number = 18

其中,31的就是鼠标滚轮事件,11、10、5、25等事件和鼠标事件无关
190 0、192 0,才是鼠标移动事件(QEvent::MouseMove),但是只是偶尔收到,密度明显不对
而且有个特征,只有鼠标移动到视图的边界上时,eventFilter才能接收到鼠标移动事件
所以结果中看到,190 0、192 0,y坐标是0

离线myseemylife

只看该作者 1楼 发表于: 2012-06-01
是Scene吧鼠标事件截获了吧。、、、QGraphicsMouseEvent
蠢笨的愚钝~
快速回复
限100 字节
 
上一个 下一个