LINUX.ORG.RU

Как в Qt сделать многокнопочный хоткей, например Ctrl + A + X

 ,


0

1

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

★★★★★
Ответ на: комментарий от Stanson

Не покатит же. В эвентах нет информации о всех нажатых кнопках. Это во-первых. Так ко всему и keyrelease не всегда срабатывает. Так можно виртуально вечно зажатую клавишу получить.

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

В эвентах нет информации о всех нажатых кнопках.

Ну так запомни у себя, делов-то.

Так ко всему и keyrelease не всегда срабатывает.

Да неужели.

Так можно виртуально вечно зажатую клавишу получить.

Ну если всё через жопу делать, не думать головой, «сторонние библиотеки» искать и всё такое - то можно не только вечно зажатую клавишу получить, но и ногу себе отстрелить, яйца прищемить и rm -rf / сделать.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

Ну так запомни у себя, делов-то.

информации такой нет, запоминать нечего, аллё

Да неужели

вот вам и неужели

не думать головой

а сам-то даже не может проблему осознать, когда ему на неё указали

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

Да

И кто же? (тебя не считаем)

На многих клавах есть ограничения в схемотехнике, которые не позволят определить некоторые сочетания одновременно нажатых клавиш.

Да и выглядит это как нубская выпендрежная поделка.

anonymous
()
Ответ на: комментарий от pon4ik

Вот если тебе нужно <C-X, A> вместо <C-X-A>, тогда придётся поупражняться с таймерами, но я почему-то уверен, что правильная константа для дефолтного таймаута где-то уже торчит наружу из Qt api.

pon4ik ★★★★★
()
Последнее исправление: pon4ik (всего исправлений: 1)
Ответ на: комментарий от pon4ik

Ан, нет, имаксовский стиль теперь тоже вполне себе поддерживается(а может и всегда поддерживался, хм).

pon4ik ★★★★★
()
Ответ на: комментарий от anonymous

Всё там срабатывает.

Нет. Как раз из-за «На многих клавах есть ограничения в схемотехники». На всех клавах есть ограничения на количество нажатых одновременно клавиш. Из-за этого в определённых ситуациях не срабатывает как событие press и release. Кроме того release может «исчезать» при потере фокуса.

тебя не считаем

почему? мне для себя и надо

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

почему? мне для себя и надо

Потому что вопрос был о распространении подобной дичи в существующем софте.

anonymous
()
Ответ на: комментарий от pon4ik

больше 4 и не надо, но там есть нюансы срабатывания QShortcut, которые неудобны, в частности из-за срабатывания по press а не release, в результате чего некоторые комбинации путаются, типа «A+B» и «A»

тайминги тоже не настраиваются

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

Я не встречал несрабатывающие key release в Qt. Запомнить все нажатые клавиши и момент их нажатия, и если это произошло в течение трех секунд например - значит комбинация сработала. Всё реально, я так делал но для мыши

То что release не ловится это какая то ошибка в конкретной программе

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от next_time

Как раз из-за «На многих клавах есть ограничения в схемотехники». На всех клавах есть ограничения на количество нажатых одновременно клавиш. Из-за этого в определённых ситуациях не срабатывает как событие press и release. Кроме того release может «исчезать» при потере фокуса

Хм, интересная инфа, может быть. Но в таком случае вообще никакое стандартное решение не поможет, нужно писать свой код и тестироваться с проблемной клавой

А может придумать иной способ ввода? Вот сам Qt Creator допускает только вариации Ctrl Alt Shift + одна буква, но нет ни единой комбинации двух и более букв. Не спроста это всё

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

но нет ни единой комбинации двух и более букв

С Num Pad и Ctrl+ не сработает скорее всего.

kostyarin_ ★★
()

Я озадачен. Если QKeySequence не умеет последовательности, то как они у нас в Stellarium работают? ;)

Hint: Ctrl+A, X

alex-w ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Я не встречал несрабатывающие key release в Qt.

Плохо тестировал.

  1. Зажать несколько клавиш, переключить фокус на окно другой программы, отпустить
  2. В зависимости от модели клавиатуры зажать достаточно много клаиш, отпускать в обратной последовательности

причём обе проблемы проявятся не только в куте, а вообще в любом фраемворке

next_time ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

и тестироваться с проблемной клавой

вообще у всех клав ограничение до 5 (ЕМНИП) обычных клавиш, у некоторых даже меньше 5, может и 3 максимумом быть легко

никакое стандартное решение не поможет

там проблема не в том, что в таких редких ситуациях слот отпускания не сработает, проблема в том, что если считать состояние «нажатости» по release+press, то в случае несработавшего release кнопка виртуально будет считаться нажатой до тех пор, пока снова не нажмётся

хотя есть вариант, сбрасывать «нажатость» по таймингу

next_time ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Ctrl Alt Shift + одна буква, но нет ни единой комбинации двух и более букв

Традиции. На моей нотубучной клаве такая комбинация, допустим Ctrl Alt Shift + P, вообще одной рукой не нажимаема - Ctrl справа нет.

Alt и Meta тоже неудобно расположены, Ctrl + буква уже все забиты стандартными сокращениями, в общем в условиях «клава + мышь» других удобных вариантов, как двух буквенных сочетаний и нет.

next_time ★★★★★
() автор топика

В парадигме нормально спроектированных хоткеев это будет Ctrl+A, X, а не наркоманские Ctrl+A+X, Ctrl+A+H и прочая дрянь, от которой даже пользователь Emacs’а придёт в недоумение.

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

EXL ★★★★★
()
Ответ на: комментарий от next_time

Синдром утёнка

Сочувствую твоему диагнозу.

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

EXL ★★★★★
()
Ответ на: комментарий от next_time

«аутоиммунное заткнись не ссорьтесь» (с)

Не ссорьтесь. Я вспомнил, встречал такие комбинации, сначала жмешь Ctrl+<первая буква>, только потом <вторая буква>. Одной рукой такое не нажмешь, двумя можно, вроде физиологических ограничений нет :)

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от next_time

информации такой нет, запоминать нечего, аллё

А головой подумать? Получаешь keypress Ctrl+A, ставишь битик 0 в переменной, получаешь keypress Ctrl+X ставишь битик 1. На release соответсвующие битики чистишь. Если в переменной оказалось 3, то бишь оба бита выставлены, значит нажаты одновременно обе кнопки, делаешь что там надо по твоему хоткею.

вот вам и неужели

При потере фокуса или движении мыши чистишь переменную с битами. Ваш КО.

а сам-то даже не может проблему осознать, когда ему на неё указали

Нет никаких проблем вообще.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

во второй руке мышь у мышевозов или чашка кофе )

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

Насчёт путающихся комбинаций - уверен, что дело в Qt а не в клаве?

gadzikowski.com/nkeyrollover.html

Я почему спрашиваю - вроде как есть клавы где только две и в некоторых случаях 3 клавиши посылаются. Я правда таких не встречал, а писать код на Qt ради проверки, что у тебя там не выходит - мне слегка лень:)

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

gadzikowski.com/nkeyrollover.html

тут он вводит сперва A, потом B - если назначены операции и на А и на АВ, это тоже неправильно, надо только вторую операцию производить, но не первую

next_time ★★★★★
() автор топика
Последнее исправление: next_time (всего исправлений: 1)
Ответ на: комментарий от next_time

костыль

Тебе шашечки, или ехать?

Ты хочешь какой-то нестандартный костыль, но чтобы без костылей. :) Так не бывает.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 2)
Ответ на: комментарий от Stanson

Ты хочешь какой-то нестандартный костыль, но чтобы без костылей. :) Так не бывает.

Обычно таким школьники занимаются. Но с возрастом умнеют.

anonymous
()

Одновременно зажатые НЕмодификаторы если где-то работают, то хардварно не поддерживаются по истерическим причинам.

</thread>

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Одновременно зажатые НЕмодификаторы если где-то работают, то хардварно не поддерживаются по истерическим причинам.

Автор хочет боли пользователям.

anonymous
()
Ответ на: комментарий от anonymous

Автор хочет боли пользователям.

А я хочу смерти автору. :3

mord0d ★★★★★
()
Ответ на: комментарий от next_time

Есть биты модификаторов, а вот складывать биты НЕмодификаторов — некуда, они идут последовательно, но исходя из ограничений частично железа, частично драйверов (защита от флуда — туда же) последовательно регистрируется последняя зажатая клавиша, не являющаяся модификатором.

Раньше это работало иначе, но уроки истории — за отдельную плату.

mord0d ★★★★★
()
Последнее исправление: mord0d (всего исправлений: 1)
Ответ на: комментарий от mord0d

Я вспомнил программу minicom! Там Alt+Ctrl+<буква 1>, затем жмешь <буква 2> и происходит что нужно. Стало быть схема существует, но таки да, одновременно два батона не жмется

Minicom работает так до сих пор, в простой консоли

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от mord0d

Осталось рассказать это разработчикам gens. Они-то не в курсе, что у них многобуквенные комбинации, оказывается, во всех rom-ах не работают.

next_time ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

затем жмешь

Предварительно отпустив <буква 1>. Как и в Emacs.

Стало быть схема существует

Это совсем другое поведение, нужно держать стек нажатых аккордов (в Qt его придётся изобретать, наверное).

но таки да, одновременно два батона не жмется

И не должно.

mord0d ★★★★★
()
Ответ на: комментарий от next_time

Они-то не в курсе, что у них многобуквенные комбинации, оказывается, во всех rom-ах не работают.

Это ограничено xKRO (чаще всего 6KRO), и это неестественное поведение для софта, используется чаще всего в играх (откуда и пришло).

mord0d ★★★★★
()
Ответ на: комментарий от Serral

(в Qt его придётся изобретать, наверное).

Нет,там такое поддерживается.

Это было предположение по причине того, что я такого в qt-приложениях не встречал, и сам под Qt не писал.

mord0d ★★★★★
()
Ответ на: комментарий от next_time

завязывай

Удавку у тебя на шее? С удовольствием! :3

mord0d ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.