父窗口有设置 MouseTracking 时,还是无法跟踪鼠标移动事件,该如何解决
父窗口有设置 MouseTracking 时,还是无法跟踪鼠标移动事件
通过向导创建了一个最普通的 MainWindow 程序,然后在 MainWindow 的构造函数中添加了一个子窗口:
EditView 的实现如下:
editview.h
editview.cpp
鼠标没有按住,移动到 EditView 的子窗口上时不能响应到 mouseMoveEvent() 事件,这是怎么回事,该如何解决?
------解决方案--------------------
哦。。没仔细看。
你在EditView里面放了一个子控件,事件会先发送给子控件处理的。所以没进EditView的mouseMoveEvent。
如果子控件是必须的,那就重载子控件的mouseMoveEvent做处理,
或者用eventFilter,交给EditView处理。
通过向导创建了一个最普通的 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处理。