我使用editingFinished()
QLineEdit
信号来执行操作。文档说,当按下返回或输入键或失去焦点时,将发出此信号。
它适用于numlock(enter key
键盘)上的Windows
,当它失去焦点时,但是当我按下键盘上的“返回键”时,不会发出信号。我尝试使用returnPressed()
信号,它的行为方式相同。
我错过了什么吗?
谢谢
答案 0 :(得分:2)
子类QLineEdit
重新实施keyPressEvent()
抓住Qt::Key_Enter
按下并完成工作或自己发出信号
来自文档:
Qt::Key_Return 0x01000004
Qt::Key_Enter 0x01000005 Typically located on the keypad.
这样的事情:
void LineEdit::keyPressEvent(QKeyEvent *event)
{
if(event->key() == Qt::Key_Enter)
{
//do something
}
}
如果你不想要子类,你可以installEventFilter
到你的对话窗口,抓住你的lineEdit并检查是否Qt::Key_Enter
被按下了。
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui->lineEdit && event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(Qt::Key_Enter == keyEvent->key() )
{
qDebug() << "numpad Enter pressed";
}
}
}
别忘了
protected:
bool eventFilter(QObject *obj, QEvent *event);//in header
和
qApp->installEventFilter(this);//in constructor
例如:
void MainWindow::on_lineEdit_returnPressed()
{
qDebug() << "numpad Enter pressed";
}