2016-11-18 15 views
0

Я использую QT, и у меня есть QAction, который я хочу использовать Cmd и Plus в качестве ярлыка для увеличения. Я выяснил, что QKeySequence :: ZoomIn будет отображать это и другие собственные комбинации клавиш для масштабирования на других типах клавиатур. Я использовал код ниже для этого, однако, это не работает правильно, как я бы надеялся.Что я делаю неправильно при создании этого ярлыка?

QAction *zoomInAction = new QAction(QIcon("zoominimg.png"),"Zoom in", this); 
zoomInAction->setShortcut(QKeySequence::ZoomIn); 
connect(zoomInAction, SIGNAL(triggered()), this, SLOT(zoomIn())); 

Ярлык работает при использовании клавиши + на цифровой клавиатуре внешней клавиатуры, однако, при использовании клавиши +, которые вы должны нажать сдвиг затем = ключи использовать, ярлык больше не работает, и Метод zoomIn никогда не вызван.

Кто-нибудь когда-либо сталкивался с этой проблемой раньше и знал, как ее можно решить?

Я использую Qt 5.7 на MacOS 10.12, если это помогает.

ответ

0

Поведение, которое вы испытываете по дизайну. Qt использует только standard shortcuts во избежание любых разногласий, которые могут возникнуть при использовании различных раскладок клавиатуры.

An example предоставляется в Qt документации суммирует ваша проблема:

Например, ярлыки, Ctrl плюс и Ctrl минус, часто используются в качестве ярлыков для операций масштабирования в графических приложениях, и они могут быть определены как " Ctrl + "и" Ctrl + - "соответственно. Однако то, как эти ярлыки указываются и интерпретируются, зависит от раскладки клавиатуры. Пользователи норвежских клавиатур заметят, что клавиши + и - не смежны на клавиатуре, но все равно смогут активировать оба ярлыка без необходимости нажатия клавиши Shift. Тем не менее, пользователям с английскими клавиатурами необходимо будет удерживать клавишу Shift, чтобы ввести символ +, что делает ярлык эффективным таким же, как «Ctrl + Shift + =».

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

Например, разработчик, использующий английскую клавиатуру, может решить указать «Ctrl + Shift + =» в качестве последовательности клавиш, чтобы создать ярлык, который по совпадению ведет себя так же, как Ctrl +. Тем не менее, ключ = должен быть доступен с помощью клавиши Shift на норвежской клавиатуре, что делает требуемый ярлык эффектом Ctrl Shift Shift = (невозможная комбинация клавиш).

Поэтому, если вы все еще хотите использовать ярлык, который включает модификатор Shift, вы должны сами его закодировать в дополнение к стандартным. Поступая таким образом, вы должны иметь в виду, что ярлык с жестким кодом может работать не так, как ожидалось, на других раскладках клавиатуры.