2015-12-28 39 views
0

如何區分Alt按和Alt + 3按我有一個問題。 我有兩個不同的操作。 Alt - 顯示菜單欄 Alt + 3 - 將第3個窗格添加到我的主窗口中。如何區分Alt按和Alt + 3按

如何區分這兩個事件?問題是(在這個時候),當我按下Alt + 3時。布斯動作被調用。

void cc::keyPressEvent(QKeyEvent * event) 
{ 
    switch (event->key()) 
    { 
     case Qt::Key_3: 
      if(event->modifiers() == Qt::AltModifier) 
      { 
       if(ui->widget_3->isVisible()) 
        ui->widget_3->hide(); 
       else 
        ui->widget_3->show(); 
      } 
      break; 
     case Qt::Key_Alt: 
      if(!menuBar()->isVisible()) 
       ui->menuBar->show(); 
      else 
       ui->menuBar->hide(); 
      break; 
     default: QWidget::keyPressEvent(event); 
    } 
} 

我知道,我可以使用計數器並等待一段時間,並在時間結束時顯示菜單(2s)。如果用戶按Alt + 3,如果他沒有按下它2秒,我只顯示3.窗格。如果他們只按3秒鐘,我會顯示菜單。

看起來有點複雜。我能做些簡單的事嗎?

+3

我認爲唯一理智的方法是讓「ALT only」操作對keyReleaseEvent()做出反應。這裏例如在Firefox Alt與Alt + 3不依賴於時機(我認爲這太可怕了),但如果我釋放Alt並且沒有其他鍵被按下,則Alt會觸發。您是否嘗試簡單地將QAction與各自的快捷鍵一起使用?也許它只是做正確的事情。 –

+0

弗蘭克,你有權利。這正是我的意思。謝謝。 – exo

回答

1

您應該將與僅Alt-only快捷方式相關的代碼放入void cc::keyReleaseEvent(QKeyEvent * event)事件中。這個事件一旦發佈就會發生。

所以當你按下Alt時,什麼也沒有發生,如果你釋放它,「顯示菜單欄」會發生,但如果你一直按下並按下3,那麼其他代碼就會發生。

+0

謝謝你的幫助。我測試它,但它看起來像我尋找的解決方案。 – exo