2012-09-25 24 views
1

我正在開發一個虛擬音樂鍵盤,它允許您按鍵盤上的鍵並讓它彈奏音符。所以在我的MainWindow類中,我重新實現了keyPressEvent。我想忽略修飾符(Control,Alt,Shift等)生成的事件,以及其他非字符鍵(如Tab,Backspace和Enter)生成的事件。這樣的事情將是理想的:如何忽略不輸出字符的按鍵事件

void MainWindow::keyPressEvent(QKeyEvent *event) 
{ 
    if (!event->key().isCharacter())) 
    { 
     event->ignore(); 
     return; 
    } 

    // handle the event 
} 

有沒有辦法做這樣的事情(短測試每個可能的非字符鍵)?如果不是,如果它是一個修飾符,是否至少有一種輕鬆忽略事件的方法?

回答

5

看起來你想要QKeyEvent::text()

+0

完美...我只能檢查返回的QString的大小,並忽略事件,如果它等於0。 – Anthony

+0

Anthony:'isEmpty()'通常比檢查size()更受歡迎。 –

+0

奇怪的是,在我的應用程序中,當我嘗試這樣做時,每次鍵入內容時都會正確地打印出字母,除了字母W,A,S和D.在這四種情況下,代碼甚至不會輸入覆蓋'keyPressEvent()'方法! – SexyBeast