Добрый день, всем посетителям данного форума. Пишу вот тест клавиатуры для Windows. Не думал, что при написании столь простого приложения
столкнусь с проблемами. Но увы я ошибался)).
По началу для отлавливания нажатия и отжатия клавиши использовал следующие методы:
QString pressStyle = "QPushButton{background-color: green; border: 2px solid grey;}";
QString releaseStyle = "QPushButton{background-color: darkGrey; border: 2px solid grey;}";
void KEY_TEST::keyPressEvent(QKeyEvent *event)
{
if(key==Qt::Key_F1)
key_test_frame->ui->pushButtonF1->setStyleSheet(pressStyle);
................................
// и так далее все остальные клавиши
event->accept();
}
void KEY_TEST::keyReleaseEvent(QKeyEvent *event)
{
if(key==Qt::Key_F1)
key_test_frame->ui->pushButtonF1->setStyleSheet(releaseStyle);
................................
// и так далее все остальные клавиши
event->accept();
}
Столкнулся с проблемой что клавиша PrintScreen (пытался отлавливать по ключу Key_Print) не срабатывает. Так же по ключам Key_Shift, Key_Control,
Key_Meta, Key_Alt определялось нажатие соответственно как и левых так и правых клавиш Shift, Сtrl, Meta(Win), Alt (а хотелось бы их различать).
По этому решил использовать кода клавиш, это бы позволило запускать тест не только при английской раскладке. Переписал свои методы в другой вид:
void KEY_TEST::keyPressEvent(QKeyEvent *event)
{
if(event->nativeScanCode()==59)
key_test_frame->ui->pushButtonF1->setStyleSheet(pressStyle);
................................
// и так далее все остальные клавиши
event->accept();
}
void KEY_TEST::keyReleaseEvent(QKeyEvent *event)
{
if(event->nativeScanCode()==59)
key_test_frame->ui->pushButtonF1->setStyleSheet(releaseStyle);
................................
// и так далее все остальные клавиши
event->accept();
}
Это решило проблему с клавишами Shift, Сtrl, Win, Alt. Но с PrintScreen проблема так и осталась не решенной. Также на украинской раскладке
при нажатии правого Alt-а почему-то срабатывает и нажатие левого Ctrl-а. Не знаю может это специально реализовано для каких-нибудь целей.
Нашел вот пример по PrintScreen:
https://sites.google.com/site/ecspertiza/stati/qt/perehvat-nazatia-print-screen-v-qtНо увы, когда я подцепил это к своему тесту, то такое ощущение, что клавиатура отлавливает только нажатие клавиш, а отжатие нет.
К тому же замечал, что клавиатура за частую начинает тупить, как буд-то отключается, и чтобы она снова запустилась нужно выключить
приложение, выйти из системы Windows и снова ввойти.
Буду рад всем советам по-поводу отлавливания нажатия и отжатия клавиши PrintScreen в Windows.