• 6886阅读
  • 5回复

[提问]为何我安装的事件过滤器没有效果? [复制链接]

上一主题 下一主题
离线advanceduser
 

只看楼主 倒序阅读 楼主  发表于: 2010-01-06
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2011-01-07) —
代码是这样的:

class MainWindow :
     public QMainWindow
{
     Q_OBJECT

public:
    MainWindow(void);

protected: 
    bool eventFilter(QEvent* event);

private:
     QGraphicsView* _view;
};

MainWindow::MainWindow(void)
{
     _view = new QGraphicsView;
     setCentralWidget(_view);

     installEventFilter(_view);
}

bool MainWindow::eventFilter(QEvent* event)
{
     qDebug() << "event filter"; // <<< 执行到此没有反应??
     return false;
}

第一次用这个事件过滤器,看Qt助手里也是这样用的,为什么我的代码不行,我哪里写错了嘛?
[ 此帖被advanceduser在2010-01-06 13:26重新编辑 ]
离线dbzhang800

只看该作者 1楼 发表于: 2010-01-06
bool QObject::eventFilter ( QObject * watched, QEvent * event )   [virtual]
离线advanceduser

只看该作者 2楼 发表于: 2010-01-06
我太马虎了,不过函数按照原型改好后仍然无法相应过滤器,为何?
离线jorneyr

只看该作者 3楼 发表于: 2010-01-06
_view = new QGraphicsView;
     setCentralWidget(_view);

     _view ->installEventFilter(this);

你的过滤器装反了。
仔细看文档中,哪一个是watched:被监控对像。哪一个是监控对象。

void QObject::installEventFilter ( QObject * filterObj )
Installs an event filter filterObj on this object. For example:
monitoredObj->installEventFilter(filterObj);
An event filter is an object that receives all events that are sent to this object.
离线hackself
只看该作者 4楼 发表于: 2010-01-06
引用第3楼jorneyr于2010-01-06 16:22发表的  :
_view = new QGraphicsView;
     setCentralWidget(_view);
     _view ->installEventFilter(this);
.......


完全同意....
离线advanceduser

只看该作者 5楼 发表于: 2010-01-06
谢谢jorneyr帮忙,确实是这里的问题,是我弄错了。
快速回复
限100 字节
 
上一个 下一个