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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: 2 и более Stretch колонки  (Прочитано 5469 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Июль 07, 2017, 06:13 »

Дрбрый день

Все прекрасно когда в таблице/дереве одна колонка Stretch, остальные Fixed или ResizeToConent. Но с 2 и более Stretch свободное место просто делится поровну между ними. В рез-те нередко получается что в одной полно места, в другой все порезано. Слышал что надо считать размер самому - хорошо, но куда поместить этот код? Ну и сам алгоритм расчета не лишен интереса. Напр такой расклад
Цитировать
Текст 1
Текст 2
..
А я вот такой баааальшой текст
Текст 100
Здесь при расчете хорошо бы отбросить слишком длинные строки если они редки

Спасибо
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Июль 07, 2017, 11:32 »

Ну просто же переопределить data с Qt::SizeHintRole, нет?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Июль 07, 2017, 11:58 »

Ну просто же переопределить data с Qt::SizeHintRole, нет?
Это ширина одной ячейки (и то когда ResizeToContent). Я хочу посчитать и выставить ширину всей колонки сам - но где мне это приткнуть чтобы автоматом вызывалось на изменения в таблице?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Июль 07, 2017, 12:07 »

Ну так вьюха пробегается по всем ячейкам и высчитывает ширину колонки на основании сайзхинта ячеек.
Просто сделайте хинт ограниченным по ширине сверху и вуаля.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Июль 08, 2017, 10:09 »

Просто сделайте хинт ограниченным по ширине сверху и вуаля.
Мне хотелось бы сначала собрать всю информацию о ширине айтемов в нужных колонках, а потом уже, на основании ее, вычислить "оптимальные" размеры. Иначе что/как ограничивать? Может просто места "хватает на всех" или наоборот, только минимальный размер и возможен.

Нашел QAbstractItemView::sizeHintForColumn (virtual), лучшего ничего не видно. Придется наверное при его вызове для первой Stretch посчитать для всех. Ну хорошо, а как же считать? Просто "по максимуму" (как у великих троллей) может оказаться плохо если попадется длиннющая строка-урод. Да и обычно колонки есть менее и более важные
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Июль 08, 2017, 11:14 »

Да и обычно колонки есть менее и более важные
И, как правило, "важность колонок" разработчика не совпадает с "важностью колонок" пользователя. Улыбающийся А так как при автоматическом расчете ширины колонок нельзя менять их руками, пользователи начинают очень грустить.
Поэтому, я сразу разрешаю ручное управление колонками и делаю механизм, который автоматически сохраняет состояние всех колонок на всех вьюшках.  
« Последнее редактирование: Июль 08, 2017, 11:20 от Old » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Июль 08, 2017, 15:20 »

Ну хорошо, а как же считать?
По "среднему" ( сумма длин / количество ).
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Июль 09, 2017, 08:56 »

По "среднему" ( сумма длин / количество ).
Может лучше так: считаем среднее и отбрасываем тех чья длина напр в 2 раза больше среднего. А потом считаем максимум по остальным.

А вот как распределить место между 2 (и более) колонками? Ну ясно первая проверка "все просто влазит". Допустим нет - и что дальше?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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