2012-02-13 135 views
1

我希望在选择qtreeview时按下Enter键时发生“事件”。因为我不希望子类qtreeview(更容易为设计师) - 我试图安装一个事件过滤器。然而,这似乎并没有工作:QT eventfilter for qtreeview无法正常工作?

类仅包含一个公共职能:

bool InputTreeEventHandler::eventFilter(QObject *obj, QEvent *event) const { 
    if (event->type() == QEvent::KeyPress) { 
     QKeyEvent *keyevent = dynamic_cast<QKeyEvent*>(event); 
     QTreeView* tree = dynamic_cast<QTreeView*>(obj); 
     if (keyevent->key() == Qt::Key_Enter) { 
      //code 
     } 
    } else { 
     return false; 
    } 

} 

并添加事件类似如下:

ui.InputTreeView->installEventFilter(InputTreeKeyboardEater.get()); 

哪里ui.InputTreeView是我树状希望按下输入时动作,并且InputTreeKeyboardEater a(共享)指向一个对象的指针InputTreeEventHandler

当把一个breakpoi nt在上面的函数启动时显示整个事件处理程序甚至没有被调用 - 我可能做错了什么?

回答

4

请参阅here - QObject::eventFilter不是常量,这可以解释您的问题。 InputTreeView正在寻找一个非const的版本,这是不存在的。另外eventFilter是保护不公开,虽然我不认为这是至关重要的。

+0

谢谢,我一直对qt的常量正确性“缺乏”感到惊讶:/ – paul23 2012-02-13 20:53:09

+0

@ paul23为什么eventfilter函数应该是const?实施者可能想要修改这个 - 而且这不应该需要演员... – 2013-06-04 12:35:10