2014-01-09 4 views
1

Я использую KeyPressEvent в своей заявке. Но письма от a до z не работают.Клавиатурные буквы от a до z не работают в keyPressEvent в Qt

void mywindow::keyPressEvent(QKeyEvent *event) 
{ 
    switch(event->key()) 
    { 
     case Qt::Key_Left: 
      break; 
    } 
} 

Это работает правильно

Но когда я использую Key_R или Key_L он не работает.

Редактировать: keyReleaseEvent работает с этими буквами.

+0

Это не будет скомпилирован. – nikitoz

+1

Key_Left nad Key_L - это не то же самое. Key_L - это «L», Key_Left - стрелка влево. В любом случае, есть ли у вас какой-либо другой фильтр событий, который использует определенные нажатия клавиш? – lpapp

+1

Можете ли вы опубликовать весь код этого класса? Возможно, что-то не так в другом месте. – DeadWarlock

ответ

1

Попробуйте это:

void SimpleWidget::keyPressEvent(QKeyEvent *event) 
{ 
    if (event->key() == Qt::Key_R) 
    { 
     // Key R was pressed 
    } 
} 

Или вы можете просто проверить значение ключа при помощи метода QString QKeyEvent::text() const.

+1

. OP упомянул, что он не работает над тем, что вы написали. – lpapp

+1

Нет, это не работает для меня – Rupesh

+4

@ LaszloPapp, если честно, ОП изменил свой вопрос после того, как Максим ответил. – TheDarkKnight

0

Не уверен, что вы все еще нуждаетесь в этом, но, возможно, кто-то будет.

Я был в такой же ситуации, при нажатии на буквы z на мой QMainWindow не было отправлено ни одного события, но ctrl, cmd, alt или esc ... работал.

Я решил проблему, добавив это в конструктор.

this->setFocusPolicy (Qt::StrongFocus); 

чтение setFocusPolicy документа

затем

MyQMainWindow::keyPressEvent(:keyPressEvent(QKeyEvent *pevent) 
{ 
    if (pevent->key() == Qt::Key_Control) 
     qDebug() << "ctrl pressed"; 
    if (pevent->key() == Qt::Key_A) 
     qDebug() << "a pressed"; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^