kianenigma
kianenigma

Reputation: 1405

Qt KeyPress Event on QlineEdit

i searched over the net on how to capture a key press event only on a specific QWidget ( a QlineEdit ) one way to do is to inherit from that class and over ride the virtual keyPress function , but i cant do that since i'm using QtDesigner ( is it possible to do it with QtDesigner ? )

i also tried to over ride the KeyPress Event on the entire windows but i need to filter only the the events when a specific lineEdit is active which i could not find a way to do so ( but there must be a way )

over all what is the best way to sole this problem ? thanks :)

Upvotes: 4

Views: 8022

Answers (1)

Jablonski
Jablonski

Reputation: 18504

No, you can't do this with Designer.If you don't want to use inheritance, then you should use event filter. For example:

bool Dialog::eventFilter(QObject *obj, QEvent *event)
{
    if (obj == ui->lineEdit && event->type() == QEvent::KeyPress)
    {
        QKeyEvent *key = static_cast<QKeyEvent *>(event);
        qDebug() << "pressed"<< key->key();
    }
    return QObject::eventFilter(obj, event);
}

To use eventFilter you should also:

protected:
    bool eventFilter(QObject *obj, QEvent *event);//in Dialog header

and

qApp->installEventFilter(this);//in Dialog constructor

Upvotes: 5

Related Questions