繁体   English   中英

Qt:显示 QCompleter 时,eventFilter 未收到 KeyPress

[英]Qt: eventFilter does not recieve KeyPress when QCompleter is shown

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

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

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

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

为什么我的 eventFilter 没有收到 KeyPress 事件?

相关代码...

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;
}

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

  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);
      }
  }      

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM