Russian Qt Forum
Ноябрь 01, 2024, 03:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Изогнутый Slider  (Прочитано 4875 раз)
r04
Гость
« : Апрель 05, 2015, 12:53 »

Здравствуйте.
Потребовалось реализовать изогнутый (круглый) слайдер.

Второй день хожу по интернету, ищу как это сделать правильно.

Я думаю, что отрисовка слайдера должна выполняться на С++ (в paintEvent), ведь в QML я такое сделать не смогу, я прав?

Если кто-то опытный поделится информацией или примером (пусть не точно таким, но близким) - буду очень благодарен.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Апрель 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 сделан. Там точно в каком-то из них был кругленький ползунок (вроде).
« Последнее редактирование: Апрель 05, 2015, 14:24 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Отражение луны
Гость
« Ответ #2 : Апрель 05, 2015, 22:31 »

Уже ответили, просто уточню. Круг = rectangle с равными стороными и radius 90.
Записан
r04
Гость
« Ответ #3 : Апрель 07, 2015, 19:49 »

Ну, можно попробовать и на QML.. Там для рисования есть Canvas.. А чтобы перемещать объект по любому пути (в данном случае - по дуге?) - есть специальный класс Path. Или что-то вроде того, если я не ошибаюсь.

Спасибо огромное, примеры посмотрю.
Записан
r04
Гость
« Ответ #4 : Апрель 07, 2015, 20:48 »

Почитал про Canvas и прочее что советовали - это все не в тему вроде бы.
Мне нужен элемент с поведением как обычный слайдер (модель та же), но внешне он не такой:
Цитировать
------|------
А круглый и ползунок двигается по кругу, при этом еще и поворачивается (чтобы всегда смотрел в центр круга).

Также как в обычном слайдере, часть ползунка от начала отсчета до текущей позиции закрашено другим цветом (синим, например).

Я сразу посмотрел на Path (потому что еще давно видел статью на хабре по теме), но он не позволяет ничего такого.

Я думаю мне придется на С++ наследовать абстрактный слайдер и рисовать все руками, начиная от круглой линии (состоящей из сегмента до ползунка синего цвета и серого сегмента за ползунком), заканчивая, поворотом ползунка.

Ну и не только рисовать, но и события мыши переопределять и прочее.

Я варианта лучше не нашел.
Записан
Отражение луны
Гость
« Ответ #5 : Апрель 08, 2015, 04:32 »

Воопервых, задача как была описана абсолютно невменяемым образом, так и осталась. Ничего личного.
"Ползунок", если я правильно сванговал, легко рисуется при помощи canvas (должно видимо получиться что-то вроде дуги?), размещается в Item, у которого потом меняется rotation. Таким образом его легко можно двигать по кругу, даже с анимацией. (Behavior on ratation ... ). Все это дело размещается поверх - Rectangle в Rectangle с radius 90 (это будет круг). Таким образом вы получите круг, в котором дуга свободно движется по кругу. Контент внутри слайдера как менять думаю и так понятно.
Приложите схематичный рисунок.
« Последнее редактирование: Апрель 08, 2015, 04:33 от Отражение луны » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Апрель 08, 2015, 05:34 »

Я думаю мне придется на С++ наследовать абстрактный слайдер и рисовать все руками, начиная от круглой линии (состоящей из сегмента до ползунка синего цвета и серого сегмента за ползунком), заканчивая, поворотом ползунка.

Ну и не только рисовать, но и события мыши переопределять и прочее.
Ну ничего смертельного в этом нет, за полдня можно сделать. Статическую часть можно нарисовать 1 раз и слить в кеш.

В общем QML - тут все время "ползунки"  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.127 секунд. Запросов: 23.