首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt:当显示QCompleter时,eventFilter不接收KeyPress

Qt:当显示QCompleter时,eventFilter不接收KeyPress
EN

Stack Overflow用户
提问于 2020-05-22 13:01:02
回答 1查看 176关注 0票数 0

我有一个名为QPlainTextEdit的子类编辑器。编辑器包含一个用于建议文本的对象,称为Suggester。用户可以按下来自提示者的按钮来显示QCompleter,即activeCompleter。

当KeyPress事件从编辑器传入时,我需要处理activeCompleter,所以在Suggester中,我创建了一个eventFilter并将其安装到传入的编辑器实例中。

当activeCompleter未显示时,eventFilter会按预期接收KeyPress事件。但是,当通过activeComplter->complete()显示activeComplter时,eventFilter不会接收KeyPress事件(但是编辑器会这样做)。

我不明白为什么会这样。QCompleter不是一个小部件。编辑器保持焦点。我不会截获任何其他地方的事件或键。

为什么我的eventFilter接收不到KeyPress事件?

相关代码...

代码语言:javascript
复制
Editor::Editor(QWidget *parent) : QPlainTextEdit(parent){
    suggester = new Suggester(this);
}

Suggester::Suggester(Editor* editor){
    this->editor = editor;
    editor->installEventFilter(this);
}

bool Suggester::eventFilter(QObject *obj, QEvent *event){
    qDebug()<< "event filter of type " << event->type() << " from " << obj;
    return false;
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-23 04:00:29

您的eventFilter成员似乎不完整。您必须按如下方式过滤QEvent:KeyPress事件:

代码语言:javascript
复制
  bool Suggester::eventFilter(QObject *obj, QEvent *event)
  {
      if (obj == textEdit) {
          if (event->type() == QEvent::KeyPress) {
              QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
              qDebug() << "Ate key press" << keyEvent->key();
              return true;
          } else {
              return false;
          }
      } else {
          // pass the event on to the parent class
          return Suggester::eventFilter(obj, event);
      }
  }      
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61948167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档