纠结了两天了,求指教
我想要在子视图中移动鼠标,而能够在父
窗口中捕获鼠标坐标信息
于是我在父窗口中
实例化了一个视图(QGraphicsView),然后给它
安装了一个eventFilter,
eventFilter在父窗口中。
但是结果
显示,父窗口的eventFilter能够接受到滚轮事件,但接收不到移动、单击、双击事件
代码简化如下:
- Widget::Widget(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::Widget)
- {
- ui->setupUi(this);
- setGeometry(10,10,500,500);
- view = new QGraphicsView(this);
- view->setGeometry(0,0,500,450);
- view->installEventFilter(this);
- view->setMouseTracking(true);
- }
- bool Widget::eventFilter(QObject *watched, QEvent *event)
- {
- if ( watched == view )
- {
- qDebug() << "Event Type Number = " << (int)(event->type());
- if ( event->type() == QEvent::MouseMove )
- {
- QPoint pos = (static_cast<QMouseEvent *>(event))->pos();
- qDebug() << pos.x() << pos.y();
- return true;
- }
- }
- return false;
- }
- Widget::~Widget()
- {
- delete ui;
- }
这是qDebug部分输出结果:
- Event Type Number = 31
- Event Type Number = 31
- Event Type Number = 31
- Event Type Number = 31
- Event Type Number = 5
- 190 0
- Event Type Number = 11
- Event Type Number = 10
- Event Type Number = 5
- 192 0
- Event Type Number = 11
- Event Type Number = 25
- Event Type Number = 9
- Event Type Number = 18
其中,31的就是鼠标滚轮事件,11、10、5、25等事件和
鼠标事件无关
190 0、192 0,才是鼠标移动事件(QEvent::MouseMove),但是只是偶尔收到,密度明显不对
而且有个特征,只有鼠标移动到视图的边界上时,eventFilter才能接收到鼠标移动事件
所以结果中看到,190 0、192 0,y坐标是0