我有一个名为QPlainTextEdit的子类编辑器。编辑器包含一个用于建议文本的对象,称为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;
}发布于 2020-05-23 04:00:29
您的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);
}
} https://stackoverflow.com/questions/61948167
复制相似问题