[英]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.