我在网上搜索了如何仅在特定的QWidget(QlineEdit)上捕获按键事件的一种方法是从该类继承并越过虚拟keyPress函数,但是由于我正在使用,所以我无法做到这一点QtDesigner(可以用QtDesigner来做吗?)
我还尝试在整个窗口上使用KeyPress Event,但是当特定的LineEdit处于活动状态时,我只需要过滤事件,而我找不到方法(但是必须有一种方法)
总的来说,解决这个问题的最佳方法是什么?谢谢 :)
不,您不能使用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)
| 归档时间: |
|
| 查看次数: |
3593 次 |
| 最近记录: |