MaoDzeDun
Фев. 6, 2010 13:26:38
Здравствуйте!
Возникла довольно нестандартная проблема, над которой бьюсь второй день.
Есть машина на линухе, написал софтину на PyQT, предполагая, что софтина будет работать и управляться при помощи тачскрина.
Есть в софтине много QPushButton-ов. Когда управление происходит мышкой, то все ОК - я мышкой подвожу курсор к QPushButton-у и кликаю один раз левой кнопкой мышки, что приводит к эмиту сигнала clicked().
В случае же с тачскрином, чтобы нажать на кнопку нужно дважды клацать по самому тачскрину в одном и том же месте, т.к. софтина или линух воспринимает первый клик по тачскрину как перевод курсора на кнопку и только второй клик эмитит сигнал clicked(), т.е. в общем то поведение правильное, но хочется как-то сделать, чтобы первый клик по тачскрину не только переводил курсор, но и эмитил сигнал clicked()
Подскажите, пожалуйста, братцы, в какую сторону курить?
Огромное спасибо заранее!
bialix
Фев. 6, 2010 14:14:36
А в других приложениях работает также? Первое впечатление: драйвер самого тач-скрина кривой.
MaoDzeDun
Фев. 6, 2010 14:18:13
Здравствуйте
Да, работает также и, да, кривой - полностью согласен
сейчас конечно паралельно ищу решение в самом линуксе, но буду рад помощи и со стороны pyqt
bialix
Фев. 6, 2010 17:29:05
Для QLabel есть сигнал linkHovered, но для кнопок ничего подобного нету. Можно попробовать поиграться с QWidget.enterEvent или чем-то похожим. Посмотрите документацию на QWidget и доступные события, кроме сигналов.
pasaranax
Фев. 6, 2010 17:37:41
Попробуй использовать tabletEvent. Или на крайняк enterEvent, чтобы виджет реагировал при наведении курсора, это правда хак, и есть в нем смысл только если софтина будет использоваться исключительно с тачскрином. Но лучше попытаться настроить драйвер, если есть такая возможность.
ZZZ
Фев. 6, 2010 17:49:52
pasaranax
enterEvent
Угу… А если я захочу два раза на одну и ту же кнопку нажать? И что будет, если после нажатия отрисуется другой диалог и какая-нить кнопка окажется под курсором?
Вывод: долбить дрова и только дрова. Посмотри в настройках xorg, может что-нить есть.
Добавленно:Мне пришёл в голову такой костыль: отлавливать
движение мыши над кнопкой. При попытке нажать второй раз, пользователь врядли попадёт на тот же пиксель… Но это тоже совсем криво…
bazooka
Фев. 6, 2010 18:32:28
можно не enterEvent а focusInEvent
Lexander
Фев. 8, 2010 00:12:25
Переопределить QWidget::focusInEvent пробовали?
MaoDzeDun
Фев. 8, 2010 12:46:46
Господа, спасибо всем искренне за помощь!
Решил все-таки добить сами дрова тачскрина, т.к. хаками не хочется.
Как закончу - обязательно сообщу.
Еще раз спасибо!
MaoDzeDun
Фев. 13, 2010 14:28:20
еще раз всем огромное спасибо за помощь
в итоге последовал здравым советам и начал устранять первопричину проблемы - тачскрин
немного инфы. вдруг кому-то пригодится
тачскрин славной тайванькой компании aTouch, сделан на логике не менее славной компании eGalax
в комплекте и на сайте были драйвера EETI, которые, собственно, и создавали глюк
много и вдумчиво гуглил и нагуглил иксовый модуль xorg-xserver-input-evtouch (
http://conan.de/touchscreen/evtouch.html), который умеет работать с eGalax-ами
минуя родные дрова EETI, в конфиге иксов добавил секцию с использованием драйверов evtouch, немного помучился с калибровкой и все чудно заработало
еще раз спасибо, братцы