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は、イベントハンドラ全体が呼び出されていないことを示しています。何が間違っていますか?
ありがとう、私は、const-correctnessのqtの「不足」に驚いています。/ – paul23
@ paul23なぜeventfilter関数がconstであるべきですか?実装者はこれを変更したいかもしれません - これはキャストを必要としません... –