怎样把Qt的界面和键盘按键联系起来
我现在在开发一个项目,需要用按键来调用各个页面,不知道怎么实现
[解决办法]
快捷键绑定?处理keyevent
[解决办法]
某一个page需要接受键盘事件,就设置 page->grabKeyboard();
void Button::keyPressEvent(QKeyEvent *event){ if(event->key() == Qt::Key_Home) { keypress = true; }} void Button::keyReleaseEvent(QKeyEvent *event){ if( (event->key() == Qt::Key_Home) && keypress) //这里定义的是Home 键 { keyrelease = true; if( keyrelease && keypress) { emit signal_key_pressed(); //发出 Home键按下的信号 } } keypress = false; keyrelease = false;}
[解决办法]
我也好久没用QT了,不过我记得你可以用事件过滤器eventFilter。就是给你的那个类对象安装一个事件过滤器。然后在对象接受到得事件中去处理你想要的按键按下的动作。
#include <qwidget.h>
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget( QWidget *parent = 0, const char *name = 0 );
protected:
bool eventFilter( QObject *, QEvent * );
};
MyWidget::MyWidget( QWidget *parent, const char *name )
: QWidget( parent, name )
{
// 为父对象(如果有的话)安装一个过滤器
if ( parent )
parent->installEventFilter( this );
}
bool MyWidget::eventFilter( QObject *o, QEvent *e )
{
if ( e->type() == QEvent::KeyPress ) {
// 对于键被按下进行特殊处理
QKeyEvent *k = (QKeyEvent *)e;
qDebug( "Ate key press %d", k->key() );//你可以通过k-key和你想要的按键匹配进行处理
return TRUE; } else {
// 标准事件处理
return QWidget::eventFilter( o, e );
}
}
[解决办法]