信号returnPressed()和editingFinished()不适用于QLineEdit

时间:2014-09-25 14:27:31

标签: c++ qt qlineedit

我使用editingFinished() QLineEdit信号来执行操作。文档说,当按下返回或输入键或失去焦点时,将发出此信号。

它适用于numlock(enter key键盘)上的Windows,当它失去焦点时,但是当我按下键盘上的“返回键”时,不会发出信号。我尝试使用returnPressed()信号,它的行为方式相同。

我错过了什么吗?

谢谢

1 个答案:

答案 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";
}