在 QLineEdit 中接收转义事件?

问题描述 投票:0回答:3

这是一个有点初学者的问题,但我找不到解决方案。

我正在使用一个继承自

QLineEdit
的自己的对象,并接收数字作为输入(现在工作顺利)。

现在我想在用户按下 Escape 按钮时接收一个事件。

textChanged()
事件不会发生这种情况。根据文档,没有特殊的逃逸事件。那么还有什么办法可以做到这一点呢?

谢谢!

c++ qt qt5 key-events
3个回答
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);

3
投票

我也遇到了同样的问题。我通过在我的

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

0
投票

您可以使用 Esc 键盘快捷键定义 QAction。

例如,我这样做是为了在更复杂的小部件中自动关闭弹出编辑:

auto edit = new QLineEdit(this);
// ...
auto action = new QAction(edit);
action->setShortcut(Qt::Key_Escape);
edit->addAction(action);
connect (action, &QAction::triggered, [edit](){
  edit->hide();
});

(隐藏会使 QLineEdit 失去焦点,因此 editFinished() 信号将被触发)

© www.soinside.com 2019 - 2024. All rights reserved.