QlineEdit上的Qt KeyPress事件

时间:2014-11-24 19:59:54

标签: c++ qt

我在网上搜索了如何仅在特定的QWidget(QlineEdit)上捕获按键事件 一种方法是从该类继承并过度使用虚拟keyPress函数, 但我不能这样做,因为我正在使用QtDesigner(是否有可能用QtDesigner做到这一点?)

我还试图在整个窗口上过度使用KeyPress事件,但我只需要过滤特定lineEdit处于活动状态时的事件,我找不到这样做的方法(但必须有办法)< / p>

所有解决这个问题的最佳方法是什么?谢谢:)

1 个答案:

答案 0 :(得分:4)

不,你不能用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);
}

要使用eventFilter,您还应该:

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

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