Как отобразить полосу прокрутки для представления списка, содержание которого постоянно меняется? - PullRequest
0 голосов
/ 07 июня 2010

У меня есть элемент управления типа ListView, который отображает список элементов различной высоты.Содержимое списка и высота элементов могут изменяться - фоновый поток заполняет список и вычисляет макет каждого элемента, возможно, даже когда пользователь прокручивает содержимое.Это подводит меня к моему вопросу: как отобразить полезную вертикальную полосу прокрутки для этого представления?Я видел случаи (в частности, веб-браузеры), когда ползунок «прыгает» от курсора мыши, когда пользователь перетаскивает его, в результате основной контент увеличивается по высоте.Я не хочу этого.

Пока что

  1. Вместо ползунка, представляющего высоту области просмотра относительно высоты содержимого, возможно, он может представлять точку на временной шкалевместо?(Элементы отсортированы по отметке времени).Это, по крайней мере, предотвратит изменение полосы прокрутки при расчете макетов элементов.

  2. Полностью избавьтесь от полосы прокрутки и используйте клавишный переключатель вперед / назад, как тот, который используется в Picasa (чем дальше ползунок перемещается вверх или вниз, тем быстрее прокручивается вид,пока пользователь не выпустит слайдер).Если я выберу этот путь, есть ли какие-либо элементы управления, которые вы можете порекомендовать?

Я использую Qt, но это относится к дизайну пользовательского интерфейса в целом.

1 Ответ

1 голос
/ 07 июня 2010

IMO фундаментальная проблема с классической полосой прокрутки состоит в том, что из-за фонового заполнения, действительный диапазон изменяется - и, таким образом, значение положения полосы прокрутки изменяется.

Если вы можете предсказать полный диапазон элементов, вы все равно можете предоставить полосу прокрутки и заменить еще неизвестные элементы на «загрузка ...».

В противном случае, рокер (это то, чтоофициальное имя?) будет следующей лучшей вещью для использования.

Однако, поскольку у вас есть выделенная шкала (временная шкала), может быть лучше иметь отдельные кнопки, которые переходят на выделенное время (например, одну минуту, один час, один день, ...).Для более изящного вида вы можете создать рокер с «горячими» областями, которые прыгают в течение определенного времени, тогда как области между ними интерполируются (линейные или логарифмические, в зависимости от масштаба, который нужно покрыть).

т.е. линияэто (рисует только «обратную» половину):

--------------------------
|##|XXXXXXX|##|XXXXXXX|##|
--------------------------
-1h        -1m       -1s
...