Russian Qt Forum
Сентябрь 24, 2022, 19:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Виджет настройки  (Прочитано 2171 раз)
juvf
Программист
*****
Offline Offline

Сообщений: 532


Просмотр профиля
« : Апрель 01, 2022, 11:59 »

Всем доброго дня.

В прикреплении картинка виджета, который я бы хотел реализовать на QML. Это колесо настройки (вертикальное или горизонтальное)....
Суть: в центр виджета палец(мышку) ставишь и тянешь вправо-влево... вся линейка со шкалой начинает двигаться вместе с пальцем (наподобе слайдера). У виджета должно быть свойство currentValue, step1 и step2, инерция.
step1 - это минимальное значение на которое изменится currentValue, а step2 - это минимальное расстояние, на которое надо протянуть виджет, чтобы изменился currentValue.
Т.е. если step1 = 100, а step2 = 50 (пикселе/мм/inch/pt/попугев), то если протянуть виджет на 150 пикселей, то currentValue изменится на 300.

Ну и если по виджету чиркнуть, то прокрутка должна быть инертная и по инерции промотать какое-то кол-во  до остановки. Вобщем аналог механического инертного колеса настройки.

Как подобное реализовать? Может есть похожий пример где в гугле? Даже не знаю как сформулировать поиск, чтоб похожее найти. Или может кто подкинет мыслеформу, как подобное реализовать в QML?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Апрель 01, 2022, 13:49 »

А зачем виджет и QML? (цыганщиной отдает). Это стандартная операция pan(orama), обычно с зажатой клавишей пробел. Ее всегда надо делать
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 532


Просмотр профиля
« Ответ #2 : Апрель 01, 2022, 14:03 »

А зачем виджет и QML? (цыганщиной отдает).

goto wikipedia
Элеме́нт интерфе́йса — примитив графического интерфейса пользователя. Другие названия: элемент управления, ви́джет (англ. widget).

Свой кастомный виджет (или элемент управления) можно реализовать с помощью каких то базовых виджетов или с нуля Qt, QML, GrLib, LVGL,....

Цитировать
Это стандартная операция pan(orama)
что за операция?
« Последнее редактирование: Апрель 01, 2022, 14:16 от juvf » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Апрель 01, 2022, 14:17 »

что за операция?
Откройте напр картинку в фотошопе и наведите на нее мышу. Нажмите пробел - курсор "рука" покажет что можно двигать картинку. Вот это и есть "pan", т.е. др способ скроллирования, часто более удобный.  Конечно нужна QScrollArea и вычислять величину сдвига - этого никто не отменял
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 532


Просмотр профиля
« Ответ #4 : Апрель 01, 2022, 14:23 »

к сожелению нет фотошопа.... про QScrollArea....

т.е. делаю прямоугольник, заполняю его беру QScrollArea. у QScrollArea убираю видимые скролбары... потом рисую картинку шкалы (допустим в png), размещяю эту картинку в QScrollArea и.... зациклить QScrollArea?  а у QScrollArea можно зациклить сдвиг?

ps а теперь бы всё тоже самое, только на QML.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Апрель 01, 2022, 15:11 »

размещяю эту картинку в QScrollArea и....
И вычислить насколько скроллить. Напр я делал так
Код
C++ (Qt)
bool DisplayWin::DragPan( QMouseEvent * e )
{
QPointF org = mImageArea->widget()->mapFrom(mImageArea, QPoint(1, 1));
QPointF ofs = e->localPos() - org;
QPointF scroll = mDragPos - ofs;
HScroll()->setValue(scroll.x());
VScroll()->setValue(scroll.y());
 
return true;
}
 
Где mDragPos = e->localPos() при первом нажатии мыши. Если картинка масштабится или это 3D - вычисления будут сложнее

только на QML.
Цацка для пижонов
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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