Клавиатурные буквы от a до z не работают в keyPressEvent в Qt

Я использую KeyPressEvent в своем приложении. Но буквы от а до я не работают.

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

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

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

Изменить: keyReleaseEvent работает с этими буквами.


person Suresh    schedule 09.01.2014    source источник
comment
Это не будет компилироваться.   -  person Nikita    schedule 09.01.2014
comment
Key_Left nad Key_L — это не одно и то же. Key_L — это нажатая буква «L», Key_Left — стрелка влево. В любом случае, есть ли у вас какой-либо другой фильтр событий, принимающий на себя определенные нажатия клавиш?   -  person lpapp    schedule 09.01.2014
comment
Можете ли вы опубликовать весь код этого класса? Может в другом месте что-то не так.   -  person DeadWarlock    schedule 09.01.2014
comment
Я говорю, что все буквы от a до z не работают. левая клавиша, правая клавиша, вверх и вниз они работают   -  person Suresh    schedule 09.01.2014
comment
Код, который вы пишете, должен корректно работать и с буквами (Key_R или Key_L не имеет значения). Я полагаю, у вас что-то не так в другом месте (может быть, eventFilter)   -  person DeadWarlock    schedule 09.01.2014
comment
Я не использовал фильтр событий. Escape, клавиша Alt также работают нормально   -  person Suresh    schedule 09.01.2014
comment
Вы понимаете мое мнение: нормальные люди не могут найти ошибку во всем коде, который вы пишете, глядя только на маленький метод, который вы показываете, и не иметь этой ошибки. Можете ли вы опубликовать весь код?   -  person DeadWarlock    schedule 09.01.2014
comment
Объясните, что вы имеете в виду под словом «не работает». Событие не приходит? Событие с неправильным ключом (каким именно)? Ошибка компиляции? Также опубликуйте компилируемый пример.   -  person n. 1.8e9-where's-my-share m.    schedule 09.01.2014
comment
Я имею в виду, когда я нажимаю A, B или любые другие буквы, событие не выполняется под ними. Код тот же @DeadWarlock. Просто я добавил Key_A, Key_B, похожие на Key_Left.   -  person Suresh    schedule 09.01.2014
comment
Рупеш, я голосую за закрытие, пока вы не предоставите пример, совместимый с sscce.org. Как только вы сделаете это, я буду рад помочь себе в дальнейшем.   -  person lpapp    schedule 09.01.2014
comment
Извините, но я очень новичок в qt и C++. Мне нужно работать в офисе, поэтому я спрашиваю   -  person Suresh    schedule 09.01.2014


Ответы (2)


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

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

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

person Maxim Makhun    schedule 09.01.2014
comment
@LaszloPapp, честно говоря, ОП изменил свой вопрос после того, как Максим ответил. - person TheDarkKnight; 09.01.2014
comment
@LaszloPapp, вам лучше скомпилировать мой код и проверить, прежде чем голосовать за мой ответ - person Maxim Makhun; 09.01.2014
comment
@Merlin: оригинальный контент, stackoverflow.com/revisions/ Итак, суть остался прежним, но даже если бы это было не так, этот ответ сейчас не имеет значения, поэтому я бы удалил его, если вместо этого нет реальных ответов. - person lpapp; 09.01.2014

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

Я был в той же ситуации, когда при нажатии букв от a до 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";
}
person epicanriome    schedule 22.05.2015