Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Июль 07, 2017, 06:13



Название: 2 и более Stretch колонки
Отправлено: Igors от Июль 07, 2017, 06:13
Дрбрый день

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

Спасибо


Название: Re: 2 и более Stretch колонки
Отправлено: Авварон от Июль 07, 2017, 11:32
Ну просто же переопределить data с Qt::SizeHintRole, нет?


Название: Re: 2 и более Stretch колонки
Отправлено: Igors от Июль 07, 2017, 11:58
Ну просто же переопределить data с Qt::SizeHintRole, нет?
Это ширина одной ячейки (и то когда ResizeToContent). Я хочу посчитать и выставить ширину всей колонки сам - но где мне это приткнуть чтобы автоматом вызывалось на изменения в таблице?


Название: Re: 2 и более Stretch колонки
Отправлено: Авварон от Июль 07, 2017, 12:07
Ну так вьюха пробегается по всем ячейкам и высчитывает ширину колонки на основании сайзхинта ячеек.
Просто сделайте хинт ограниченным по ширине сверху и вуаля.


Название: Re: 2 и более Stretch колонки
Отправлено: Igors от Июль 08, 2017, 10:09
Просто сделайте хинт ограниченным по ширине сверху и вуаля.
Мне хотелось бы сначала собрать всю информацию о ширине айтемов в нужных колонках, а потом уже, на основании ее, вычислить "оптимальные" размеры. Иначе что/как ограничивать? Может просто места "хватает на всех" или наоборот, только минимальный размер и возможен.

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


Название: Re: 2 и более Stretch колонки
Отправлено: Old от Июль 08, 2017, 11:14
Да и обычно колонки есть менее и более важные
И, как правило, "важность колонок" разработчика не совпадает с "важностью колонок" пользователя. :) А так как при автоматическом расчете ширины колонок нельзя менять их руками, пользователи начинают очень грустить.
Поэтому, я сразу разрешаю ручное управление колонками и делаю механизм, который автоматически сохраняет состояние всех колонок на всех вьюшках.  


Название: Re: 2 и более Stretch колонки
Отправлено: GreatSnake от Июль 08, 2017, 15:20
Ну хорошо, а как же считать?
По "среднему" ( сумма длин / количество ).


Название: Re: 2 и более Stretch колонки
Отправлено: Igors от Июль 09, 2017, 08:56
По "среднему" ( сумма длин / количество ).
Может лучше так: считаем среднее и отбрасываем тех чья длина напр в 2 раза больше среднего. А потом считаем максимум по остальным.

А вот как распределить место между 2 (и более) колонками? Ну ясно первая проверка "все просто влазит". Допустим нет - и что дальше?