首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

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

2012-03-21 
父窗口有设置 MouseTracking 时,还是无法跟踪鼠标移动事件通过向导创建了一个最普通的 MainWindow 程序,然

父窗口有设置 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处理。

热点排行