Russian Qt Forum

Qt => Qt Quick => Тема начата: r04 от Апрель 05, 2015, 12:53



Название: Изогнутый 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 - тут все время "ползунки"  :)