Qt中特殊Tab键事件的实现

    技术2024-12-19  12

    在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); }
    最新回复(0)