Зачем Вам keyPressEvent? Просто возьмите modfiers от события мыши чтобы узнать какие клавиши были зажаты
Имеете в виду QApplication::keyboardModifiers()?
Ваше решение не подходит. У меня еще и вид курсора меняется, когда он находится над ссылкой. А это создает дополнительные трудности. Реакция должна быть именно на нажатие и отжатие Ctrl (вид курсора меняется если он находится над ссылкой).
То есть представьте, навели вы на ссылку курсор мышки (Ctrl не нажат). Курсор обычный. Когда вы нажали Ctrl (мышкой еще не двигали и не кликали) вид курсора должен поменяться, чтобы пользователь видел что на ссылку можно нажать. И это нельзя сделать в обработчиках события мышки.
Другими словами:
А в твоем решении получается, что вид курсора будет меняться только при клике мышкой (а если поместить в mouseMoveEvent() то при движении мышкой) а это неправильно. Вид курсора должен меняться даже если мышкой не двигают и не кликают в случае, когда курсор находится над ссылкой. Нажал Ctrl над ссылкой - курсор стал с указательным пальцем. Отпустил - стал обычным. Обработчики мышы и проверки внутри них тут не могут использоваться.
Понятно?