当前位置: 代码迷 >> QT开发 >> 父窗口有设置 MouseTracking 时,还是无法跟踪鼠标移动事件,该如何解决
  详细解决方案

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

热度:105   发布时间:2016-04-25 05:02:43.0
父窗口有设置 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_OBJECTpublic:    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处理。