2014-09-13 3 views
0

Я создаю элемент управления прокруткой в ​​Qt с нуля, и мне удалось вычислить положение центра слайдера в вертикальной полосе прокрутки. Полоса прокрутки прикреплена к окну редактирования, а добавление линий приводит к тому, что слайдер идет вниз. Ползунок - это всего лишь небольшой красный круг.Логарифмическое поведение полосы прокрутки

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

Если вы попытаетесь вставить огромное количество новых строк на любой блокноте, слайдер со временем станет медленнее и медленнее (кроме того, чтобы все меньше и меньше).

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

+1

Проблема заключается в том, что вы не обновляете максимальное количество строк при изменении текста. Позиция полосы прокрутки должна быть равна 'available_height * current_line/max_lines', где' max_lines' следует всегда синхронизировать с тем, что находится в вашем текстовом поле. – Rufflewind

+0

Это решило мою проблему, спасибо! Сделайте это ответом, и я приму его – Dean

ответ

1

Проблема в том, что вы не обновляете максимальное количество строк при изменении текста. Положение скроллинга должно быть равно:

available_height * current_line/max_lines 

где max_lines должны всегда синхронизированы с тем, что в вашем текстовом поле. Это гарантирует, что отношение current_line/max_lines никогда не будет превышать 1, и, следовательно, положение полосы прокрутки никогда не будет превышать available_height.

Смежные вопросы