2012-02-13 4 views
1

qtreeviewが選択されている間にEnterキーを押すと「イベント」が発生します。私はqtreeviewをサブクラス化したくないので(デザイナーにとっては簡単です)、私はイベントフィルターをインストールしようとしました。しかし、これは動作していないようでした:qtreeviewのqt eventfilterが機能しませんか?

クラスは単に公共の機能が含まれます。

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がツリービューIである
ui.InputTreeView->installEventFilter(InputTreeKeyboardEater.get()); 

Enterキーを押したときに行動したい場合は、InputTreeEventHandlerの(共有)ポインタInputTreeKeyboardEater

ブレークポイを入れるとき上記の関数の先頭にあるntは、イベントハンドラ全体が呼び出されていないことを示しています。何が間違っていますか?

答えて

4

here - QObject::eventFilterは、問題を説明するconstではありませんを参照してください。 InputTreeViewは非constバージョンを呼び出す予定ですが、そこにはありません。また、私はそれが重要だとは思わないが、eventFilterは公開されていない保護されています。

+0

ありがとう、私は、const-correctnessのqtの「不足」に驚いています。/ – paul23

+0

@ paul23なぜeventfilter関数がconstであるべきですか?実装者はこれを変更したいかもしれません - これはキャストを必要としません... –

関連する問題