2011-06-09 33 views
5

我有QTextEdit,我想要檢測「Alt + Enter」鍵被按下(兩個鍵在一起)。 我已經安裝了事件過濾器來檢測按鍵事件,當輸入時按我可以檢測到的關鍵,但我如何檢測到「Alt」鍵也被按下?如何檢測在QT中按Alt + Enter

我試着記住「Alt」鍵按下&版本(帶有靜態變量),但如果用戶在應用程序外部釋放Alt鍵,則這沒有幫助。

請參閱附上我的代碼。

bool MTGridEditDelegate::eventFilter(QObject *obj,QEvent *event){ 
static bool pressed = false; 
if(event->type() == QEvent::KeyPress) 
{ 
    if(static_cast<QKeyEvent*>(event)->key() == Qt::Key_Alt) 
    { 
     pressed = true; 
     qDebug("Alt Pressed"); 
    } 
} 
if(event->type() == QEvent::KeyRelease) 
{ 
    if(static_cast<QKeyEvent*>(event)->key() == Qt::Key_Alt) 
    { 
     pressed = false; 
     qDebug("Alt Released"); 
    } 
} 

if(event->type() == QEvent::KeyPress) 
{ 
    int key = static_cast<QKeyEvent *>(event)->key(); 
    qDebug("The Key is : %d",key); 
    switch (static_cast<QKeyEvent *>(event)->key()) 
    { 
     case Qt::Key_Backtab: 
      break; 
     case Qt::Key_Tab: 
     case Qt::Key_Enter: 
     case Qt::Key_Return: 
     { 
      QWidget *editor = ::qobject_cast<QWidget*>(obj); 
      if(!pressed) 
      { 
       emit commitData(editor); 
       emit closeEditor(editor, NoHint); 
      } 
      else 
      { 
       MQTextEdit *editBox = qobject_cast<MQTextEdit *>(editor); 
       if (editBox) 
       { 
        QString text = editBox->toPlainText(); 
        text = text + QChar('\n'); 
        //text = text + QChar('\r'); 
        editBox->setPlainText(text); 
       } 
      } 
      break; 
     } 
     case Qt::Key_Escape: 
    //  CustControlFocusLost(); 
      break; 
     default: 
      return false; 

    } 
    return true; 
} 
else 
{ 
    return QObject::eventFilter(obj,event); 
} 

}

回答

16

你爲什麼不使用keyPressEvent

你需要這樣的東西。使用修飾符()事件的方法。

void myClass::keyPressEvent(QKeyEvent *e) 
{ 
    if ((e->key()==Qt::Key_Return) && (e->modifiers()==Qt::AltModifier)) 
     doSomething(); 
} 
+0

感謝您的幫助,這就是我一直在尋找 – maxchirag 2011-06-09 12:34:07

+0

我已經thried這一個BT IM沒有得到任何輸出...這是我的代碼.. 無效的MainWindow :: keyPressEvent(QKeyEvent *事件) ((event-> key()== Qt :: Key_U)){ qDebug()<<「u」; } event-> accept(); } – 2016-07-10 09:15:42

+0

此外,如果您需要檢測AltGr,還可以使用'(e-> modifiers()==(Qt :: ControlModifier | Qt :: AltModifier))''。請注意,ALT + CTRL也會被檢測到。 – Safoyeth 2017-02-15 11:58:08