Название: Изогнутый Slider Отправлено: r04 от Апрель 05, 2015, 12:53 Здравствуйте.
Потребовалось реализовать изогнутый (круглый) слайдер. Второй день хожу по интернету, ищу как это сделать правильно. Я думаю, что отрисовка слайдера должна выполняться на С++ (в paintEvent), ведь в QML я такое сделать не смогу, я прав? Если кто-то опытный поделится информацией или примером (пусть не точно таким, но близким) - буду очень благодарен. Название: Re: Изогнутый Slider Отправлено: kuzulis от Апрель 05, 2015, 14:19 Ну, можно попробовать и на QML.. Там для рисования есть Canvas.. А чтобы перемещать объект по любому пути (в данном случае - по дуге?) - есть специальный класс Path. Или что-то вроде того, если я не ошибаюсь.
UPD: Или имелось ввиду сам "виджет" ползунка должен быть круглым? Если да - то нет проблем - делаем его из Rectangle или используем просто Image. В инете есть (раньше было на гиториусе) серия демок типа "qt-in-use-" (qt-in-use-qt-in-mobile, qt-in-use-qt-in-industrial-embedded, qt-in-use-qt-in-automotive).. можно их скачать, собрать, и посмотреть как там UI сделан. Там точно в каком-то из них был кругленький ползунок (вроде). Название: Re: Изогнутый Slider Отправлено: Отражение луны от Апрель 05, 2015, 22:31 Уже ответили, просто уточню. Круг = rectangle с равными стороными и radius 90.
Название: Re: Изогнутый Slider Отправлено: r04 от Апрель 07, 2015, 19:49 Ну, можно попробовать и на QML.. Там для рисования есть Canvas.. А чтобы перемещать объект по любому пути (в данном случае - по дуге?) - есть специальный класс Path. Или что-то вроде того, если я не ошибаюсь. Спасибо огромное, примеры посмотрю. Название: Re: Изогнутый Slider Отправлено: r04 от Апрель 07, 2015, 20:48 Почитал про Canvas и прочее что советовали - это все не в тему вроде бы.
Мне нужен элемент с поведением как обычный слайдер (модель та же), но внешне он не такой: Цитировать ------|------ А круглый и ползунок двигается по кругу, при этом еще и поворачивается (чтобы всегда смотрел в центр круга).Также как в обычном слайдере, часть ползунка от начала отсчета до текущей позиции закрашено другим цветом (синим, например). Я сразу посмотрел на Path (потому что еще давно видел статью на хабре по теме), но он не позволяет ничего такого. Я думаю мне придется на С++ наследовать абстрактный слайдер и рисовать все руками, начиная от круглой линии (состоящей из сегмента до ползунка синего цвета и серого сегмента за ползунком), заканчивая, поворотом ползунка. Ну и не только рисовать, но и события мыши переопределять и прочее. Я варианта лучше не нашел. Название: Re: Изогнутый Slider Отправлено: Отражение луны от Апрель 08, 2015, 04:32 Воопервых, задача как была описана абсолютно невменяемым образом, так и осталась. Ничего личного.
"Ползунок", если я правильно сванговал, легко рисуется при помощи canvas (должно видимо получиться что-то вроде дуги?), размещается в Item, у которого потом меняется rotation. Таким образом его легко можно двигать по кругу, даже с анимацией. (Behavior on ratation ... ). Все это дело размещается поверх - Rectangle в Rectangle с radius 90 (это будет круг). Таким образом вы получите круг, в котором дуга свободно движется по кругу. Контент внутри слайдера как менять думаю и так понятно. Приложите схематичный рисунок. Название: Re: Изогнутый Slider Отправлено: Igors от Апрель 08, 2015, 05:34 Я думаю мне придется на С++ наследовать абстрактный слайдер и рисовать все руками, начиная от круглой линии (состоящей из сегмента до ползунка синего цвета и серого сегмента за ползунком), заканчивая, поворотом ползунка. Ну ничего смертельного в этом нет, за полдня можно сделать. Статическую часть можно нарисовать 1 раз и слить в кеш.Ну и не только рисовать, но и события мыши переопределять и прочее. В общем QML - тут все время "ползунки" :) |