Russian Qt Forum
Ноябрь 01, 2024, 03:16
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Qt Quick
(Модератор:
navrocky
) >
Изогнутый Slider
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Изогнутый Slider (Прочитано 4875 раз)
r04
Гость
Изогнутый Slider
«
:
Апрель 05, 2015, 12:53 »
Здравствуйте.
Потребовалось реализовать изогнутый (круглый) слайдер.
Второй день хожу по интернету, ищу как это сделать
правильно.
Я думаю, что отрисовка слайдера должна выполняться на С++ (в paintEvent), ведь в QML я такое сделать не смогу, я прав?
Если кто-то опытный поделится информацией или примером (пусть не точно таким, но близким) - буду очень благодарен.
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Изогнутый Slider
«
Ответ #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
Отражение луны
Гость
Re: Изогнутый Slider
«
Ответ #2 :
Апрель 05, 2015, 22:31 »
Уже ответили, просто уточню. Круг = rectangle с равными стороными и radius 90.
Записан
r04
Гость
Re: Изогнутый Slider
«
Ответ #3 :
Апрель 07, 2015, 19:49 »
Цитата: kuzulis от Апрель 05, 2015, 14:19
Ну, можно попробовать и на QML.. Там для рисования есть Canvas.. А чтобы перемещать объект по любому пути (в данном случае - по дуге?) - есть специальный класс Path. Или что-то вроде того, если я не ошибаюсь.
Спасибо огромное, примеры посмотрю.
Записан
r04
Гость
Re: Изогнутый Slider
«
Ответ #4 :
Апрель 07, 2015, 20:48 »
Почитал про Canvas и прочее что советовали - это все не в тему вроде бы.
Мне нужен элемент с поведением как обычный слайдер (модель та же), но внешне он не такой:
Цитировать
------|------
А круглый и ползунок двигается по кругу, при этом еще и поворачивается (чтобы всегда смотрел в центр круга).
Также как в обычном слайдере, часть ползунка от начала отсчета до текущей позиции закрашено другим цветом (синим, например).
Я сразу посмотрел на Path (потому что еще давно видел статью на хабре по теме), но он не позволяет ничего такого.
Я думаю мне придется на С++ наследовать абстрактный слайдер и рисовать все руками, начиная от круглой линии (состоящей из сегмента до ползунка синего цвета и серого сегмента за ползунком), заканчивая, поворотом ползунка.
Ну и не только рисовать, но и события мыши переопределять и прочее.
Я варианта лучше не нашел.
Записан
Отражение луны
Гость
Re: Изогнутый Slider
«
Ответ #5 :
Апрель 08, 2015, 04:32 »
Воопервых, задача как была описана абсолютно невменяемым образом, так и осталась. Ничего личного.
"Ползунок", если я правильно сванговал, легко рисуется при помощи canvas (должно видимо получиться что-то вроде дуги?), размещается в Item, у которого потом меняется rotation. Таким образом его легко можно двигать по кругу, даже с анимацией. (Behavior on ratation ... ). Все это дело размещается поверх - Rectangle в Rectangle с radius 90 (это будет круг). Таким образом вы получите круг, в котором дуга свободно движется по кругу. Контент внутри слайдера как менять думаю и так понятно.
Приложите схематичный рисунок.
«
Последнее редактирование: Апрель 08, 2015, 04:33 от Отражение луны
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Изогнутый Slider
«
Ответ #6 :
Апрель 08, 2015, 05:34 »
Цитата: r04 от Апрель 07, 2015, 20:48
Я думаю мне придется на С++ наследовать абстрактный слайдер и рисовать все руками, начиная от круглой линии (состоящей из сегмента до ползунка синего цвета и серого сегмента за ползунком), заканчивая, поворотом ползунка.
Ну и не только рисовать, но и события мыши переопределять и прочее.
Ну ничего смертельного в этом нет, за полдня можно сделать. Статическую часть можно нарисовать 1 раз и слить в кеш.
В общем QML - тут все время "ползунки"
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...