您的位置:首页 > 编程语言 > Qt开发

Qt中特殊Tab键事件的实现

2011-02-09 17:33 323 查看
在Qt中,可以使用 void
QWidget::keyPressEvent ( QKeyEvent
 

*
k )来进行键盘响应,例如:

void Form1::keyPressEvent( QKeyEvent *k )

{

   
if(k->key() == Key_A)

    {

     
this->focusNextPrevChild(FALSE);//按A时焦点切换至上一部件

    }

    else
if(k->key() == Key_D)

    {

     
this->focusNextPrevChild(TRUE);//按D时焦点切换至下一部件

    }

    else
if(k->key() == Key_W)

    {

     
if(k->state() == Qt::ShiftButton)

     
{

   
    
this->resize(100,100);//当按下Shift+W时改变窗口大小

     
}

    }

}

但是,有一些特殊的按键比如说Tab键,如果在keyPressEvent中实现则是不能成功的,因为默认Tab事件(切换焦点)被先捕获了,默认Tab和Shift+Tab事件定义在qwidget.h中,代码为:

case QEvent::KeyPress: {

   
    QKeyEvent *k
= (QKeyEvent *)e;

   
    bool res =
FALSE;

   
    if (
k->key() == Key_Backtab ||

   
   
 (k->key() == Key_Tab &&

   
   
  (k->state() & ShiftButton)) ) {

   
   
QFocusEvent::setReason( QFocusEvent::Tab );

   
    res =
focusNextPrevChild( FALSE );

   
   
QFocusEvent::resetReason();

   
    } else if (
k->key() == Key_Tab ) {

   
   
QFocusEvent::setReason( QFocusEvent::Tab );

   
    res =
focusNextPrevChild( TRUE );

   
   
QFocusEvent::resetReason();

   
    }

}

所以我们要在之前就实现我们自己的Tab事件.实现代码如下:
bool MyWidget::event(QEvent *event)

{

if (event->type() == QEvent::KeyPress) {

QKeyEvent *ke = static_cast<QKeyEvent *>(event);

if (ke->key() == Qt::Key_Tab) {

// special tab handling here

return true;

}

} else if (event->type() == MyCustomEventType) {

MyCustomEvent *myEvent = static_cast<MyCustomEvent *>(event);

// custom event handling here

return true;

}

return QWidget::event(event);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt