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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как реализовать ?  (Прочитано 4183 раз)
yaDeveloper
Гость
« : Сентябрь 24, 2014, 20:15 »

Всем доброго времени суток.
Необходимо получить listbox, у которого кнопки прокрутки содержимого расположены по бокам. И соответственно прокрутка содержимого должна осуществляться боковыми кнопками.
Но есть проблема, каким образом определить количество элементов, которые находятся в видимой пользователю области ? Допустим, в видимой области может находиться 10 элементов, в списке 8 элементов и как результат кнопки реализующие прокрутку не доступны. А вот когда элементов становится больше 10, то правая кнопка становится доступной со всеми вытекающими (прокрутка списка вперед). После того, как пользователь перейдет на 11, то становится доступной и левая кнопка (прокручивающая список назад).


Записан
vizir.vs
Гость
« Ответ #1 : Сентябрь 25, 2014, 09:52 »

хм... А что если считать число символов, взять размер шрифта из qFont и сопоставить с размером виджета.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Сентябрь 25, 2014, 10:30 »

Пляши от horizontalScrollBar()->value()/maximum().
Если, конечно, listbox производный от QListView.
« Последнее редактирование: Сентябрь 25, 2014, 10:32 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
OKTA
Гость
« Ответ #3 : Сентябрь 25, 2014, 11:10 »

А взять QListWidget горизонтальный и проверять его элементы на isVisible совсем не кашерно?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Сентябрь 25, 2014, 11:12 »

А взять QListWidget горизонтальный и проверять его элементы на isVisible совсем не кашерно?
Зачем Непонимающий Ведь в скроллбаре и так всё есть.

Тут делать-то нечего.
Создаёшь QListView/QListWidget c flow LeftToRight.
Прячешь скроллбары через set*ScrollBarPolicy( Qt::ScrollBarAlwaysOff ).
Коннектишься к горизонтальному к valueChanged(int).
И от значений value() и maximum() управляешь кнопками.
« Последнее редактирование: Сентябрь 25, 2014, 11:18 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
OKTA
Гость
« Ответ #5 : Сентябрь 25, 2014, 11:14 »

ой, действительно, будет проще.
Записан
yaDeveloper
Гость
« Ответ #6 : Сентябрь 25, 2014, 19:14 »

спс за предложенные варианты решения.
Отдельно хотелось бы узнать у OKTA, как проверить у элементов QListWidget значение свойства isVisible ?
Записан
OKTA
Гость
« Ответ #7 : Сентябрь 26, 2014, 09:42 »

Лучше не надо, это более кривое решение. т.к. проверять видимость виджетов при прокрутке - не особо удобно, крайне затратно, да и глуповато в данном случае  Смеющийся 
Попробуй сделать, как советует GreatSnake.
Но если что, то чтобы проверить isVisible у виджета, просто обращаешься к нему через QWidget * QListWidget::itemWidget ( QListWidgetItem * item ) const и проверяешь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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