C++ 是否在QLineEdit中接收转义事件?
这是一个初学者的问题,但我没有找到解决办法 我正在使用一个自己的对象,它继承自C++ 是否在QLineEdit中接收转义事件?,c++,qt,qt5,key-events,C++,Qt,Qt5,Key Events,这是一个初学者的问题,但我没有找到解决办法 我正在使用一个自己的对象,它继承自QLineEdit,并将数字作为输入(现在可以顺利工作) 现在我想在用户按下退出按钮时接收一个事件。这不会发生在textChanged()-事件中。根据文件,没有特殊的逃逸事件。那么,还有什么其他办法可以做到这一点呢 谢谢 您可以执行按键事件: void LineEdit::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Esca
QLineEdit
,并将数字作为输入(现在可以顺利工作)
现在我想在用户按下退出按钮时接收一个事件。这不会发生在textChanged()
-事件中。根据文件,没有特殊的逃逸事件。那么,还有什么其他办法可以做到这一点呢
谢谢 您可以执行
按键事件
:
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);
我也有同样的问题。我通过在我的
qmain窗口中实现keyPressEvent
来解决这个问题
void MainWindow::keyPressEvent(QKeyEvent *e)
{
if (e->key() == Qt::Key_Escape) {
QLineEdit *focus = qobject_cast<QLineEdit *>(focusWidget());
if (lineEditKeyEventSet.contains(focus)) {
focus->clear();
}
}
}
每个QWidget
(并且QLineEdit
是一个)都有一个名为的方法。在您自己的子类中,您可以重载它并检查event->key()
是否是转义键。但是不要忘记在之后调用基类keyPressEvent
。不起作用。我在两个功能中都会得到事件,但在按下Esc键时不会得到。我的类不是直接从QLineEdit继承的,是否有可能其他人吃了这个事件?如果是,如何抑制keyPressEvent()/eventFilter()的功能?Nejat:我发现转义事件被发送到LineEdits父窗口,不是到行编辑字段本身…是否也可以将其转发到行编辑对象?那么为什么不在该窗口中处理按Escape键的事件?Nejat:然后对该事件执行什么操作-将其发送到所有子窗口小部件,因为其中一个需要它?我无法想象,没有办法在子小部件中获得Esc…如果您需要在“行编辑”中处理它,您可以在窗口中捕获它时将事件发布到子小部件。您可以发布按键事件,如:
void MainWindow::setupLineEditKeyEventList()
{
lineEditKeyEventSet.insert(ui->lineEdit_1);
lineEditKeyEventSet.insert(ui->lineEdit_2);
lineEditKeyEventSet.insert(ui->lineEdit_3);
}