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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Автоматический контроль QSlider'ов  (Прочитано 7482 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Январь 23, 2011, 11:23 »

Смотри, набросал то, что тебе нужно.
Работает корректно.
А можно (конструктивную) критику?  Улыбающийся
Я посмотрел текст и мне не понравилось что расчеты смешаны с UI. Здесь легко выделить ф-цию которая никак от UI не зависит.

Код
C++ (Qt)
template <class T>
void Balance( QVector<T> & vec,    // вектор значений (по 1 на слайдер)
             T sum,               // нужная сумма      
             size_t lockIndex )   // индекс элемента которого нельзя менять
{
...  // балансируем
}
 
После этого UI станет проще: не нужен никакой QMap, может и класс Controller не нужен, а обойтись контейнером указателей на слайдеры. Если понадобится более сложная балансировка, можно спокойно развивать ф-цию Balance не ковыряя UI
Записан
Fess
Гость
« Ответ #16 : Январь 23, 2011, 12:47 »

А можно (конструктивную) критику?  Улыбающийся
Я посмотрел текст и мне не понравилось что расчеты смешаны с UI. Здесь легко выделить ф-цию которая никак от UI не зависит.

Код
C++ (Qt)
template <class T>
void Balance( QVector<T> & vec,
             T sum,
             size_t lockIndex )
{
...
}
 
После этого UI станет проще: не нужен никакой QMap, может и класс Controller не нужен, а обойтись контейнером указателей на слайдеры. Если понадобится более сложная балансировка, можно спокойно развивать ф-цию Balance не ковыряя UI
Спасибо за критику.
Не вижу проблемы в том, что код, дорабатывающий поведение UI завязан на UI. Едва ли это будет применяться где-то еще, кроме как в этой конкретной ситуации,  поэтому нет смысла совершать лишние телодвижения для его обобщения. KISS принцип Улыбающийся

QSlider оперирует только int, а в данной ситуации (принцип сообщающихся сосудов) этого мало. Изменение на 1 должно распределиться на N слайдеров и это реальное значение для каждого слайдера нужно где-то хранить.
Вообще говоря, сумма значений слайдеров, полученная через pSlider.Value(), будет лишь приблизительно равна необходимой величине, а реальные значения знает лишь контроллер. Либо нужно ставить задачу иначе и при балансировке отдавать какому-то слайдеру предпочтение (что ИМХО еще запутаннее).
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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