父窗口有设置 MouseTracking 时,还是无法跟踪鼠标移动事件,该如何解决

父窗口有设置 MouseTracking 时,还是无法跟踪鼠标移动事件
通过向导创建了一个最普通的 MainWindow 程序,然后在 MainWindow 的构造函数中添加了一个子窗口:
C/C++ code

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    EditView* editView = new EditView(this);
    editView->move(QPoint(0, 0));
    editView->resize(100, 100);
}


EditView 的实现如下:
editview.h
C/C++ code

#ifndef EDITVIEW_H
#define EDITVIEW_H

#include <QWidget>

class EditView : public QWidget
{
    Q_OBJECT
public:
    explicit EditView(QWidget *parent = 0);
    
signals:
    
public slots:
    
protected:
    void mouseMoveEvent(QMouseEvent *event);

};

#endif // EDITVIEW_H



editview.cpp
C/C++ code

#include "editview.h"
#include <QtOpenGL/QGLWidget>

EditView::EditView(QWidget *parent) :
    QWidget(parent)
{
    // 在这里只要放入子窗口,鼠标不按住就无法响应到 mouseMoveEvent 事件,不放子窗口就可以响应,这是怎么回事?
    // 该如何解决?
    // QGLWidget *widget = new QGLWidget(QGLFormat(QGL::SampleBuffers), this);
    QWidget *widget = new QWidget(this);
    widget->resize(QSize(100, 100));
    widget->move(0, 0);

    setMouseTracking(true);
}

void EditView::mouseMoveEvent(QMouseEvent *event)
{
    setCursor(Qt::SizeBDiagCursor);
}



鼠标没有按住,移动到 EditView 的子窗口上时不能响应到 mouseMoveEvent() 事件,这是怎么回事,该如何解决?

------解决方案--------------------
哦。。没仔细看。

你在EditView里面放了一个子控件,事件会先发送给子控件处理的。所以没进EditView的mouseMoveEvent。

如果子控件是必须的,那就重载子控件的mouseMoveEvent做处理,
或者用eventFilter,交给EditView处理。