Это вопрос для начинающих, но я не нашел решения.
Я использую собственный объект, который наследует от QLineEdit
и получает числа в качестве входных данных (что теперь работает гладко).
Теперь я хочу получить событие, когда пользователь нажимает Escape-кнопку. Это не происходит с textChanged()
-событие. Согласно документации, особого побега нет. Так как еще это можно сделать?
Спасибо!
У меня была такая же проблема. Я решаю это путем реализации 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);
}
Вы можете реализовать 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);