Название: [Решено]Авто-скролл в QListWidget Отправлено: soiam от Июль 12, 2012, 14:35 Доброго времени суток.
Есть виджет, который нужно перенести в QListWidget с помощью drag-n-drop(вообщем, что-нибудь дропнуть в QListWidget). QListWidget содержит много объектов, так много что есть вертикальная полоса прокрутки. Как мне перенести виджет в ту часть списка, которая не видна? Т.е. в идеале хочется так: тяну виджет на QListWidget, когда подхожу к нижней границе QListWidget, он скролится вниз, когда к верхней- вверх. Как сделать такой скролл? Заранее благодарен в наводке на алгоритм Название: Re: Авто-скролл в QListWidget Отправлено: Bepec от Июль 12, 2012, 14:52 Отслеживать мышку с дропом, если подошла на N пикселей к нижней/верхней границе, то двигать вверх/вниз с определённым промежутком времени.
Название: Re: Авто-скролл в QListWidget Отправлено: soiam от Июль 12, 2012, 15:35 Спасибо. Сделал так. Вверх скролл работает отлично. А вот вниз... Вниз он и раньше автоматически прокручивалось с очень большой скоростью за счет того, что после последнего видимого в списке QListWidgetItemа есть небольшая пустая полоска. И доведя туда курсор при drag-n-dropе происходит быстрая стандартная qt-шная прокрутка вниз всего списка.
Как это можно побороть? Название: Re: Авто-скролл в QListWidget Отправлено: Bepec от Июль 12, 2012, 15:41 Ахз что у тебя там не так.
PS я лично не понял в чём проблема. Название: Re: Авто-скролл в QListWidget Отправлено: andrew.k от Июль 12, 2012, 15:55 Прямо анекдот у вас.
Цитировать - Ты куда идешь! В баню?! - Да нет, в баню! - А, я думал ты идешь в баню. Аппрув: Т.е. в идеале хочется так: тяну виджет на QListWidget, когда подхожу к нижней границе QListWidget, он скролится вниз, когда к верхней- вверх. Как сделать такой скролл? Заранее благодарен в наводке на алгоритм если подошла на N пикселей к нижней/верхней границе, то двигать вверх/вниз с определённым промежутком времени. Спасибо. Название: Re: Авто-скролл в QListWidget Отправлено: andrew.k от Июль 12, 2012, 15:58 Верес, предлагаю тебе новую подпись "Капитан Очевидность".
Или ник смени, это будет вообще тема! Название: Re: Авто-скролл в QListWidget Отправлено: soiam от Июль 12, 2012, 16:01 Изначально до релизации предложенной вами методики скролла скролл вверх совсем не работал, а когда подводишь к месту, указанному эллипсом на картинке, QWidgetList осуществляет почти моментальный скролл к концу списка(это его какая-то особенность наверное).
(http://img13.imageshost.ru/img/2012/07/12/image_4ffecb76653fe.png) (http://imageshost.ru/) Я сделал отслеживание события драга над списком: если он вверху списка, то включается таймер с постепенным скроллом вверх(1 элемент в 500мс). Аналогично написал для нижней части списка. Но вот этот стандартный мгновенный скроллинг вниз списка мешает. Т.е. получается вверх прокрутка с фиксированной скоростью, а вниз - моментально. Для пользователя не очень хорошо. Не знаю, что делать... Можно ли его как-нибудь отключить?Название: Re: Авто-скролл в QListWidget Отправлено: soiam от Июль 12, 2012, 16:23 Всё, разобрался. Виной всему setCurrentRow(). При драг-н-дропе я выделял элемент списка, над которым находился курсор. Когда выделяешь последний видимый без скролла элемент списка, qt автоматически делает прокрутку на 1 элемент вниз. Соответственно выделяется и новый элемент и так по кругу... Срабатывает практический моментальный скролл вниз. Выделение пришлось пока что отключить...
Название: Re: Авто-скролл в QListWidget Отправлено: Bepec от Июль 12, 2012, 17:10 Хм. Веселая особенность, незнал.
Пробуйте, смотрите - как вариант сделайте задержку с выделением элемента. Тогда получится даже без отслеживания мыши скролл вниз. to andrew.k - то, что видишь ты, необязательно очевидно для других. Видя проблему, иногда сложно оформить алгоритм в слова. Название: Re: Авто-скролл в QListWidget Отправлено: andrew.k от Июль 12, 2012, 17:24 Всё, разобрался. Виной всему setCurrentRow(). При драг-н-дропе я выделял элемент списка, над которым находился курсор. Когда выделяешь последний видимый без скролла элемент списка, qt автоматически делает прокрутку на 1 элемент вниз. Соответственно выделяется и новый элемент и так по кругу... Срабатывает практический моментальный скролл вниз. Выделение пришлось пока что отключить... Делай не setCurrentRow, а просто выделение. Это разные вещи.Текущий элемент не обязательно будет выделен и наоборот. И вообще текущий и выделенный могут быть разными элементами. Как-то так: Код
to andrew.k - то, что видишь ты, необязательно очевидно для других. Видя проблему, иногда сложно оформить алгоритм в слова. Надо не словом помогать, а делом. Название: Re: Авто-скролл в QListWidget Отправлено: soiam от Июль 12, 2012, 17:33 andrew.k, спасибо! так работает
|