Попробуйте следующее, это может работать.Хотя согласно документации nativeVirtualKey может возвращать 0, даже если имеется действительная информация.Так что не уверен, будет ли это работать все время.Я проверил это с немецкой, английской и арабской клавиатурой.
Обновление (проверено на раскладке турецкой клавиатуры)
void keyPressEvent(QKeyEvent *ev)
{
if ((ev->nativeVirtualKey() == Qt::Key_3 || ev->key() == Qt::Key_3) && ev->modifiers() == Qt::ShiftModifier)
{
//Do something
}
}
Для раскладки на турецком языке, ^ вставка (мертвая клавиша), в дополнение к вышесказанному, вы можете поймать нажатие мертвой клавиши, нажавпереопределение функции nativeEvent и вызов функции keyEvent вручную
bool nativeEvent(const QByteArray & eventType, void * message, long * result)
{
MSG *msg = reinterpret_cast<MSG*>(message);
if (msg->message == WM_DEADCHAR)
{
QKeyEvent *key = new QKeyEvent(QEvent::KeyPress, Qt::Key_3, Qt::ShiftModifier);
}
}
Одна незначительная проблема - вызывается keyEvent даже при нажатии ^ на другом языке, не обязательно только с Shift + 3, так что это неожиданноповедение, но, возможно, для вашего случая вы можете сказать пользователю, что оба Shift + 3 или ^ являются ярлыком для вашей конкретной функции