QlineEdit上的Qt KeyPress事件

kia*_*gma 4 c++ qt

我在网上搜索了如何仅在特定的QWidget(QlineEdit)上捕获按键事件的一种方法是从该类继承并越过虚拟keyPress函数,但是由于我正在使用,所以我无法做到这一点QtDesigner(可以用QtDesigner来做吗?)

我还尝试在整个窗口上使用KeyPress Event,但是当特定的LineEdit处于活动状态时,我只需要过滤事件,而我找不到方法(但是必须有一种方法)

总的来说,解决这个问题的最佳方法是什么?谢谢 :)

Che*_*byl 5

不,您不能使用Designer。如果您不想使用继承,则应使用事件过滤器。例如:

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);
}
Run Code Online (Sandbox Code Playgroud)

要使用eventFilter您还应该:

protected:
    bool eventFilter(QObject *obj, QEvent *event);//in Dialog header
Run Code Online (Sandbox Code Playgroud)

qApp->installEventFilter(this);//in Dialog constructor
Run Code Online (Sandbox Code Playgroud)