Поведение Custom Touch в Windows 7 с приложением Qt/QML

Я разрабатываю сенсорное приложение для Windows 7 с Qt/QML. Устройство конечного пользователя имеет собственное поведение касания Windows 7, а именно: при прикосновении к экрану появляется точка в точке последнего прикосновения, а при завершении физического касания Windows помещает эту точку в точку, которой коснулись теперь, и запускает в событии по нажатию.

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

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

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

Такое поведение фактически будет таким же, как стандартное поведение, например, на всех устройствах Android, которые я знаю.

Я просмотрел все элементы MouseArea и MultiPointTouchArea, пытаясь найти способ просто отличить поведение реакции нажатия от стандартного. Однако я даже не нашел способа запечатлеть начало фактического прикосновения... Все, что я хочу, чтобы произошло в начале прикосновения, действительно происходит, когда прикосновение заканчивается.

Редактировать: не имеет значения, использую ли я кнопку QML или мышью, а также свойство MouseArea.pressed: ничего не будет "нажато" до того, как палец покинет касание и даже не будет вызвана функция onClicked().

Возможно, связано: Adobe AIR: сенсорный экран неправильно запускает событие нажатия мыши, но я не нашел способа получить доступ к таким функциям, как Multitouch.inputMode (которые упоминаются в первом ответе) из собственного приложения Qt.

Как я могу добиться описанного поведения для моего приложения?

1 ответ

Решение

Решением этой проблемы является отключение "Нажмите и удерживайте" для приложения. Это то, что можно сделать в общесистемной настройке, используя... Панель управления -> Перо и касание -> Сенсорный -> Нажмите и удерживайте -> Настройки -> снимите флажок "Включить нажмите и удерживайте для щелчка правой кнопкой мыши"

Единственное решение, которое я нашел для этого в нативном коде, можно найти здесь: http://msdn.microsoft.com/en-us/library/ms812373.aspx

Я проверил, что это по крайней мере все еще работает для Windows 7. Чтобы заставить его работать для QML, я искал QWindow* в QQmlApplicationEngine::rootObjects() и использовал его winId в качестве HWND. С этим HWND я вызвал функцию TogglePressAndHold по ссылке перед app.exec().

Другие вопросы по тегам