qtreeview 的 qt eventfilter 不起作用?

发布于 2025-01-04 19:31:26 字数 851 浏览 3 评论 0原文

我希望在选择 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

揪着可爱 2025-01-11 19:31:26

请参阅此处--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. Also eventFilter is protected not public though I don't think that's critical.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文