LINUX.ORG.RU

Как откалибровать touch для Qt + EGLFS проекта

 ,


0

2

Здравствуйте. Сделал небольшое приложение для Raspberry Pi 3 на Qt 5.7 (работает поверх EGLFS). Проблема в том, что если не задавать физические размеры экрана в переменных окружения QT_QPA_EGLFS_PHYSICAL_WIDTH, QT_QPA_EGLFS_PHYSICAL_HEIGHT то все нормально. Но если указать физические размеры экрана для правильного масштабирования, то координаты тачскрина не соотвествуют координатам того что на экране. Для ввода используется libinput. Может быть кто-то сталкивался с данной проблемой, подскажите как масштабировать тачскрин под текущего dpi Qt?

В дистре нет проги ts_calibrate ?

p.s.

Qt тут вообще ни разу не в тему (ну разве что если вы вручную будете в Qt делать обработку устройства ввода)

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

ts_calibrate нету.

Тогда вопрос, почему проблема появляется только если установить QT_SCALE_FACTOR, скажем равным 2, или задать физические размеры в QT_QPA_EGLFS_PHYSICAL_WIDTH / QT_QPA_EGLFS_PHYSICAL_HEIGHT. Причем, если скажем я устанавливаю QT_SCALE_FACTOR=2, то складывается ощущение что для тачскрина он равен 4. Другими словами для тачскрина все контролы смещены вправо, вниз и гораздо крупнее. При значениях по умолчанию в Qt проблем нет. Понять бы где проблема таится.

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

Не, QT_QPA_EGLFS_PHYSICAL_WIDTH и QT_QPA_EGLFS_PHYSICAL_HEIGHT для вычисления DPI, на основе которого будут правильно вычислены размеры (если установлен QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling)). А QT_SCALE_FACTOR просто коэффициент масштабирования для всего. По идеи и координаты касаний должны одинаково масштабироваться, но происходит нечто странное с ними. Пока доделаю приложение на костылях, ибо время поджимает, а потом развернуто исследую вопрос и напишу об этом (надеюсь, найду в чем дело).

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