Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: yaDeveloper от Сентябрь 24, 2014, 20:15



Название: Как реализовать ?
Отправлено: yaDeveloper от Сентябрь 24, 2014, 20:15
Всем доброго времени суток.
Необходимо получить listbox, у которого кнопки прокрутки содержимого расположены по бокам. И соответственно прокрутка содержимого должна осуществляться боковыми кнопками.
Но есть проблема, каким образом определить количество элементов, которые находятся в видимой пользователю области ? Допустим, в видимой области может находиться 10 элементов, в списке 8 элементов и как результат кнопки реализующие прокрутку не доступны. А вот когда элементов становится больше 10, то правая кнопка становится доступной со всеми вытекающими (прокрутка списка вперед). После того, как пользователь перейдет на 11, то становится доступной и левая кнопка (прокручивающая список назад).
(http://s009.radikal.ru/i307/1409/9a/5dcb4b3e7b51t.jpg) (http://radikal.ru/fp/bf8415f0e1734da2875f8a72baaa542a)



Название: Re: Как реализовать ?
Отправлено: vizir.vs от Сентябрь 25, 2014, 09:52
хм... А что если считать число символов, взять размер шрифта из qFont и сопоставить с размером виджета.


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


Название: Re: Как реализовать ?
Отправлено: OKTA от Сентябрь 25, 2014, 11:10
А взять QListWidget горизонтальный и проверять его элементы на isVisible совсем не кашерно?


Название: Re: Как реализовать ?
Отправлено: GreatSnake от Сентябрь 25, 2014, 11:12
А взять QListWidget горизонтальный и проверять его элементы на isVisible совсем не кашерно?
Зачем ??? Ведь в скроллбаре и так всё есть.

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


Название: Re: Как реализовать ?
Отправлено: OKTA от Сентябрь 25, 2014, 11:14
ой, действительно, будет проще.


Название: Как реализовать ?
Отправлено: yaDeveloper от Сентябрь 25, 2014, 19:14
спс за предложенные варианты решения.
Отдельно хотелось бы узнать у OKTA, как проверить у элементов QListWidget значение свойства isVisible ?


Название: Re: Как реализовать ?
Отправлено: OKTA от Сентябрь 26, 2014, 09:42
Лучше не надо, это более кривое решение. т.к. проверять видимость виджетов при прокрутке - не особо удобно, крайне затратно, да и глуповато в данном случае  ;D 
Попробуй сделать, как советует GreatSnake.
Но если что, то чтобы проверить isVisible у виджета, просто обращаешься к нему через QWidget * QListWidget::itemWidget ( QListWidgetItem * item ) const и проверяешь.