QT Как проверить, нажата ли клавиша? - PullRequest
1 голос
/ 06 мая 2020

Я хотел бы иметь возможность проверить, нажата ли клавиша в любое время. Я представляю себе такое решение:

void MyQQuickPaintedItem::keyPressEvent(QKeyEvent * event)
{

  isKeyPressed[ event->key() ] = 1;

}

void MyQQuickPaintedItem::keyReleaseEvent(QKeyEvent *event)
{

  isKeyPressed[ event->key() ] = 0;

}

Чтобы проверить, нажата ли клавиша со стрелкой вправо, достаточно проверить значение isKeyPressed[ Qt::Key_Right ].

Я реализовал это и ... не работает. Я не имею в виду, что программа вылетает. isKeyPressed[ Qt::Key_Right ] всегда равно 0, даже если я нажимаю эту клавишу со стрелкой вправо или любую другую клавишу.

EDIT:

Один из файлов заголовков:

...
bool isKeyPressed[255];
...

Один из связанных файлов:

...
extern bool isKeyPressed[255];
...

Я не знаю точно, насколько большим должен быть isKeyPressed, но я не получаю SIGSEGV, поэтому размер, вероятно, подходит.

Ответы [ 2 ]

1 голос
/ 06 мая 2020

обычно вы не решаете эту проблему ... по крайней мере, не используя QT ...

если вы хотите «поймать» какие-то события нажатия клавиш, то Qt предлагает способы сделать это

то, что вы можете сделать, это «подключить» ярлык к лямбде или слоту и внутри делать то, что вам нужно ... например, поймать, когда пользователь нажимает «control + i»

connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_I), this), &QShortcut::activated, [](){qDebug() << "Here we are!";});
0 голосов
/ 06 мая 2020

Вместо массива вы можете использовать карту, если вас не интересует порядок, вы можете использовать unordered_maps, что быстрее. Ключей довольно мало, поэтому я думаю, что программа все равно будет работать быстро.

...