qtreeview 的 qt eventfilter 不起作用?
我希望在选择 qtreeview 时按下 Enter 键时发生“事件”。因为我不喜欢子类化 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
是我希望在按 Enter 时执行的树视图,并且 < code>InputTreeKeyboardEater 指向 InputTreeEventHandler
对象的(共享)指针
当在上面的函数开头放置断点时,它显示整个事件处理程序甚至没有被调用 - 我能做什么错误的?
I wish for an "event" to happen when enter key is pressed while a qtreeview is selected. As I prefer not to subclass qtreeview (easier for the designer) - I tried to install an event filter. However this didn't seem to work:
The class simply contains a public function:
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;
}
}
And the event is added like the following:
ui.InputTreeView->installEventFilter(InputTreeKeyboardEater.get());
Where ui.InputTreeView
is the treeview I wish to act when pressing enter, and InputTreeKeyboardEater
a (shared) pointer to an object of InputTreeEventHandler
When putting a breakpoint at start of function above it shows the whole event handler isn't even called - what can I be doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
请参阅此处--
QObject::eventFilter
不是 const,这可以解释你的问题。InputTreeView
正在寻求调用非常量版本,但该版本不存在。此外,eventFilter
受到保护,不公开,尽管我认为这并不重要。See here--
QObject::eventFilter
isn't const, which would explain your problem.InputTreeView
is looking to call a non-const version, which isn't there. AlsoeventFilter
is protected not public though I don't think that's critical.