我在网上搜索了如何仅在特定的QWidget(QlineEdit)上捕获按键事件 一种方法是从该类继承并过度使用虚拟keyPress函数, 但我不能这样做,因为我正在使用QtDesigner(是否有可能用QtDesigner做到这一点?)
我还试图在整个窗口上过度使用KeyPress事件,但我只需要过滤特定lineEdit处于活动状态时的事件,我找不到这样做的方法(但必须有办法)< / p>
所有解决这个问题的最佳方法是什么?谢谢:)
答案 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