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

zhhonghui 2012-02-17 03:04:44
通过向导创建了一个最普通的 MainWindow 程序,然后在 MainWindow 的构造函数中添加了一个子窗口:

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

#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

#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() 事件,这是怎么回事,该如何解决?
...全文
380 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhhonghui 2012-02-17
  • 打赏
  • 举报
回复
果然!搞定
cddark 2012-02-17
  • 打赏
  • 举报
回复
哦。。没仔细看。

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

如果子控件是必须的,那就重载子控件的mouseMoveEvent做处理,
或者用eventFilter,交给EditView处理。
zhhonghui 2012-02-17
  • 打赏
  • 举报
回复
可的的确确无法响应到 EditView::mouseMoveEvent() 啊
cddark 2012-02-17
  • 打赏
  • 举报
回复
没有问题啊。

QMainWindow最好用setCentralWidget来设置中心控件,
move过去resize看不到里面的子控件的。

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧