Получать Escape-событие в QLineEdit?

Это вопрос для начинающих, но я не нашел решения.

Я использую собственный объект, который наследует от QLineEdit и получает числа в качестве входных данных (что теперь работает гладко).

Теперь я хочу получить событие, когда пользователь нажимает Escape-кнопку. Это не происходит с textChanged()-событие. Согласно документации, особого побега нет. Так как еще это можно сделать?

Спасибо!

4

Решение

У меня была такая же проблема. Я решаю это путем реализации keyPressEvent в моем QMainWindow,

void MainWindow::keyPressEvent(QKeyEvent *e)
{
if (e->key() == Qt::Key_Escape) {
QLineEdit *focus = qobject_cast<QLineEdit *>(focusWidget());
if (lineEditKeyEventSet.contains(focus)) {
focus->clear();
}
}
}

И настройка QSet<QLineEdit *> lineEditKeyEventSet содержать QLineEditс которым нужно это поведение.

void MainWindow::setupLineEditKeyEventList()
{
lineEditKeyEventSet.insert(ui->lineEdit_1);
lineEditKeyEventSet.insert(ui->lineEdit_2);
lineEditKeyEventSet.insert(ui->lineEdit_3);
}
2

Другие решения

Вы можете реализовать keyPressEvent :

void LineEdit::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Escape)
{
...
}

QLineEdit::keyPressEvent(event);
}

Или реализовать eventFilter :

bool LineEdit::eventFilter(QObject  *obj, QEvent * event)
{

if((LineEdit *)obj == this && event->type()==QEvent::KeyPress && ((QKeyEvent*)event)->key() == Qt::Key_Escape )
{
...
}

return false;
}

При использовании eventFilter Подход, установите фильтр событий в конструкторе:

this->installEventFilter(this);
1

По вопросам рекламы [email protected]