Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ QTableWidget с закреплёнными слолбцами

Автор: NicNici 30.1.2019, 14:37

Можно ли в QTableWidget закрепить первый и последний столбец, что бы при прокрутке они оставались на своих позициях, а столбцы между ними прокручивались?

Автор: Алексей1153 31.1.2019, 11:09

NicNici, вроде нет такой фичи, но есть следующие идеи:

------------------------------
вариант 1:

берём два одинаковых по количеству колонок виджета (QTableWidget) T0 и T1,
T1 размещается на T0 как чайлд (без использования компоновщика, чтобы не было спонтанных изменений размера).
T1 делается по высоте равным T0
T1 делается по ширине таким, чтобы слева и справа остались виднЫ нужные (первая и последняя) колонки T0
левый край T0 совмещается с правым краем первой колонки.
Также на T1 скрываются колонки первая и последняя

модели обеих таблиц - одинакового класса - отображают данные из одного источника (но экземпляров модели - два, так как один экземпляр нельзя в два просмотра толкать)

В итоге, визуально имеем T1 без первой и последней колонок, остальные колонки мотаются. Справа и слева видны торчащие колонки T0 (первая и последня). Ну и нужно синхронизировать вертикальную прокрутку

плюсы: полная функциональность таблиц
минусы: придётся плотно посидеть с напильником
------------------------------
вариант 2:

скрыть первую и последнюю колонки
добавить виджету широкий border слева и справа, где вручную отрисовать имитацию колонок

плюсы: "малоинвазивность"
минусы: отрисовка вручную, ну и функционал колонок нужно реализовывать вручную, если нужна интерактивность

Автор: NicNici 5.2.2019, 16:58

Спасибо Алексей1153 за варианты.
Сам я реализовал следующим образом.
Размещаю на виджете QTableWidget и QScrollBar. Из ширины QTableWidget->viewport()->size().width() вычитаю ширину столбцов которые закреплены (не перемещающиеся по скроллингу). Из оставшейся ширины вычисляю, сколько колонок помещается. Те, которые не помещаются, делаю их скрытыми (setColumnHidden). У скроллинга задаю setMaximum равную количеству скрытых столбцов. При перемещении ползунка скроллинга скрываю одни и отображаю другие столбцы.

Автор: Алексей1153 6.2.2019, 9:21

NicNici, ну, то есть, ты прокрутку как таковую не делаешь, ты управляешь скрытостью колонок в зависимости от положения плашки скрола

но при таком варианте не получится попиксельную прокрутку сделать, будет только рывками. Если это устраивает, то нормуль )

но лично я бы поленился это всё вычислять :)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)