Qt中 Tab键

2110阅读 0评论2015-03-28 644924073
分类:嵌入式

在Qt中,可以使用 void QWidget::keyPressEvent (  * 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(event); 
     if (ke->key() == Qt::Key_Tab) 
      { // special tab handling here return true;
      }
    }
    else if (event->type() == MyCustomEventType) 
   { 
    MyCustomEvent *myEvent = static_cast(event); // custom event handling here return true;
   }

return QWidget::event(event); 
}
上一篇:Qt 安装事件过滤器installEventFilter
下一篇:云计算的体系结构