我知道使用grabKeyboard()我的小部件能够抓住每个键盘事件,如果它没有聚焦,但如果我只想捕获三个或四个键怎么办?
我尝试过使用事件过滤器 http://doc.trolltech.com/3.3/qobject.html#installEventFilter
但这不起作用(也许是因为我这样安装了它?)
class MyWidget: public QGLWidget
{
...
protected:
bool eventFilter( QObject *o, QEvent *e );
};
bool MyWidget::eventFilter( QObject *o, QEvent *e )
{
if ( e->type() == QEvent::KeyPress ) {
// special processing for key press
QKeyEvent *k = (QKeyEvent *)e;
qDebug( "Ate key press %d", k->key() );
return TRUE; // eat event
} else {
// standard event processing
return FALSE;
}
}
// Installed it in the constructor
MyWidget::MyWidget()
{
this->installEventFilter(this);
}
如何拦截我的小部件中的几个键,并将其他小部件(QTextEdits)留下?
答案 0 :(得分:6)
你自己的评论说明了一切:
return TRUE; // eat event
当您为所有键返回true
时,将不会进一步处理该事件。对于您不想处理的所有密钥,您必须返回false
。
没有事件过滤器但重新实现keyPressEvent的另一种方法:
void MyWidget::keyPressEvent( QKeyEvent* event ) {
switch ( event->key() ) {
case Qt::Key_X:
//act on 'X'
break;
case Qt::Key_Y:
//act on 'Y'
break;
default:
event->ignore();
break;
}
}