Название: Как управлять контролами и их анимацией программно (без мыши, тача, клавиатуры)? Отправлено: kuzulis от Январь 15, 2015, 18:24 Всем доброго времени.
Интересует такой вопрос: Есть ли возможность управлять QtQuick виждетами программно из QML кода без участия клавиатуры и мышки? Например будет нужно написать приложуху для некоего ембеддед девайса в котором нету клавы и мышки. Нужно например по неким командам из сети (в общем случае из некоего коммуникационного интерфейса - не важно) выбирать текущие айтемы из ListView, жмакать кнопочки и прочая анимация так чтобы было красиво (как будто это делается как обычно - мышкой или кнопочками на клавиатуре). Посмотрел сейчас на примерчики типа ModelView (ListView и прочее) в части подсветки выделеных айтемов - но там везде используется MouseArea с onClick() обработчиками и прочее. Но в моем случае нужно это делать программно, т.к. нету мышки :). В принципе, я смог-бы программно менять текущие индексы у списка: Код но тут не понятно: будут или нет автоматом эти айтемы подсвечиваться и прочее (будут ли срабатывать делегаты ?). Конечно, можно это попробовать и проверить самостоятельно (в чем проблема то? :)), но хотелось бы узнать у авторитетных программеров - как это лучше делать и возможно ли вообще? самому, но все-же ? ЗЫ: Нужно еще эмулировать такие действия как наведение на элемент, выбор элемента и присваивать им разную анимацию/трансформацию и прочее в зависимости от действия. Название: Re: Как управлять контролами и их анимацией программно (без мыши, тача, клавиатуры)? Отправлено: RSATom от Январь 15, 2015, 18:43 При острой необходимости можно просто посылать фиктивные сообщения мыши в QQuickView и тогда все будет абсолютно идентично.
вот пример (неполный, просто для демонстрации идеи) Код
Название: Re: Как управлять контролами и их анимацией программно (без мыши, тача, клавиатуры)? Отправлено: kuzulis от Январь 16, 2015, 13:58 Итак, чтобы полностью игнорировать все евенты от мышки необходимо декларировать
MouseArea в самом конце корневого элемента (так, чтобы оно заполняло весь элемент). Код
UPD: Но проще, установить eventFilter на весь QApp из C++-шного кода (чтобы все нужные евенты как от мышки так и от клавиатуры заигнорить), чем что-то ковырять в QML. Т.к. управление фокусом от клавиатуры и событиями от клавиатуры в QML реализовано "убого" (это на IRC посоветовали/подсказали). :) |