Название: Ресайз колонок в QTreeWidget [решено] Отправлено: andrew.k от Октябрь 07, 2010, 15:59 Добавляю в QTreeWidget много айтемов. В QTreeWidget 4 колонки. в последней колонке возможен достаточно длинный текст.
В конце после добавления всех делаю resizeSections( QHeaderView::ResizeToContents ); Что растягивает все колонки до размера содержимого, кроме последней (в которой длинный текст). Последняя растягивается только до края формы и не более. Два факта: 1. Если после заполнения руками сделать двойной щелчек по разделителю колонок, размер колонки выставляется правильно. Внизу появляется горизонтальная полоса прокрутки. Т.е. собственно, что требуется получить сразу. 2. Если колонку с длинным текстом поместить в середину, например, сделать предпоследней, то ресайзится сразу до нужного размера и внизу логично появляется горизонтальный скролбар. Внимание вопрос: почему так? как добиться правильного ресайза сразу? глюк qt? ПС. пробовал поставить постоянный горизонтальный скролбар. Эффекта ноль. Название: Re: Ресайз колонок в QTreeWidget Отправлено: Denjs от Октябрь 07, 2010, 16:10 думаю, правильно резайзинг делать примерно так:
(да, тут высота устанавливается, но вы поймете)))) (по крайней мере я так делаю и все что мне надо - работает) Код: QTreeWidgetItem *cTreeWidgetItem = .... ; Полагаю, вам будет достаточно установить размер ячейки для шапки-заголовка... есть там метод получения QTreeWidgetItem который является "шапкой". Название: Re: Ресайз колонок в QTreeWidget Отправлено: andrew.k от Октябрь 07, 2010, 18:02 думаю, правильно резайзинг делать примерно так: Ерунда какая-то.Код: QTreeWidgetItem *cTreeWidgetItem = .... ; Мне не нужно задавать точную ширину в пикселах, мне нужно, чтобы колонка изменила свой размер под содержимое, а она этого не делает, как ожидалось. Возможно нужно где-то как-то по хитрому задать сайзполиси, но имхо это чисто глюк. Тем более руками ресайзить каждый айтем, это посинеешь ждать (я журнал отображаю, так что там десятки тысяч айтемов, позже буду переделывать под MVC, сейчас не до производительности). Название: Re: Ресайз колонок в QTreeWidget Отправлено: AlekseyK от Октябрь 07, 2010, 20:42 Я так делаю:
Код
только в моём случае - это 1-я колонка, а Вам нужно последнюю. Запускаю этот метод всякий раз как в таблице меняются данные по сигналу от модели. Название: Re: Ресайз колонок в QTreeWidget Отправлено: andrew.k от Октябрь 08, 2010, 10:19 Я так делаю: В этом и проблема :) 1-ая колонка ресайзится как надо. А последняя нет! Я пробовал и Stretch и ResizeToContentsКод
только в моём случае - это 1-я колонка, а Вам нужно последнюю. Запускаю этот метод всякий раз как в таблице меняются данные по сигналу от модели. Только я не resizeMode меняю, а просто меняю размер колонки не меняя режим растягивания (зачем ограничивать пользователя?). Но оба варианта не работают (дважды оба: и мой и ваш вариант, и оба режима). Название: Re: Ресайз колонок в QTreeWidget Отправлено: andrew.k от Октябрь 08, 2010, 10:38 Что-то я не пойму, почему у QTreeWidget нет слота resizeColumnsToContents(), которые должен наследоваться от QTreeView.
слот resizeColumnToContents( int ) присутствует тем не менее. В исходниках не нашел причины. Где он? :) Название: Re: Ресайз колонок в QTreeWidget Отправлено: andrew.k от Октябрь 08, 2010, 11:23 Покопался в исходниках.
QTreeView::setHeader( QHeaderView *header) { ... connect( d->header, SIGNAL( sectionHandleDoubleClicked( int ) ), this, SLOT( resizeColumnToContents( int ) ) ); ... } Почему тогда когда я вызываю ее на прямую, ничего не происходит, когда щелкаю мышой резайзится до нужного размер? ??? Название: Re: Ресайз колонок в QTreeWidget Отправлено: Kolobok от Октябрь 08, 2010, 12:25 Что-то я не пойму, почему у QTreeWidget нет слота resizeColumnsToContents(), которые должен наследоваться от QTreeView. слот resizeColumnToContents( int ) присутствует тем не менее. В исходниках не нашел причины. Где он? :) У QTreeView нет такого слота. это у QTableView. Название: Re: Ресайз колонок в QTreeWidget Отправлено: andrew.k от Октябрь 08, 2010, 12:27 Путем долгих мучений, пришел к выводу, что последняя колонка у меня всегда занимает оставшееся на форме место.
Если другие колонки расширяются, то все средние двигаются, а последняя сжимается. Как убрать такое поведение? Надо чтобы уезжала за край и отображался скроллбар. Еще наблюдение. list->header()->resizeSection( 3, 1000 ); list->header()->resizeToContents( QHeaderView::ResizeToContents ); После этого колонка остается шириной в 1000 писелов, не смотря на то что текста в ней меньше. И опять таки двойной щелчек приводит ее к нужному размеру. Мне че программно делать двойной щелчок что ли? ;D Название: Re: Ресайз колонок в QTreeWidget Отправлено: andrew.k от Октябрь 08, 2010, 12:28 Что-то я не пойму, почему у QTreeWidget нет слота resizeColumnsToContents(), которые должен наследоваться от QTreeView. слот resizeColumnToContents( int ) присутствует тем не менее. В исходниках не нашел причины. Где он? :) У QTreeView нет такого слота. это у QTableView. Название: Re: Ресайз колонок в QTreeWidget Отправлено: crossly от Октябрь 08, 2010, 12:32 ... так в ассистенте все ответы... лень читать что ли... ??Надо чтобы уезжала за край и отображался скроллбар. ... void setStretchLastSection ( bool stretch ) Название: Re: Ресайз колонок в QTreeWidget Отправлено: Kolobok от Октябрь 08, 2010, 12:37 Что-то я не пойму, почему у QTreeWidget нет слота resizeColumnsToContents(), которые должен наследоваться от QTreeView. слот resizeColumnToContents( int ) присутствует тем не менее. В исходниках не нашел причины. Где он? :) У QTreeView нет такого слота. это у QTableView. Покажи мне. © Морфеус Название: Re: Ресайз колонок в QTreeWidget Отправлено: andrew.k от Октябрь 08, 2010, 14:06 ... так в ассистенте все ответы... лень читать что ли... ??Надо чтобы уезжала за край и отображался скроллбар. ... void setStretchLastSection ( bool stretch ) Спасибо. Ща проверю. Похоже это оно. Название: Re: Ресайз колонок в QTreeWidget Отправлено: andrew.k от Октябрь 08, 2010, 14:09 Что-то я не пойму, почему у QTreeWidget нет слота resizeColumnsToContents(), которые должен наследоваться от QTreeView. слот resizeColumnToContents( int ) присутствует тем не менее. В исходниках не нашел причины. Где он? :) У QTreeView нет такого слота. это у QTableView. Покажи мне. © Морфеус Название: Re: Ресайз колонок в QTreeWidget Отправлено: andrew.k от Октябрь 08, 2010, 14:25 Проверил. Наконец-то. Полдня убил :)
Правда в ассистенте написано "default value is false". делаю setStretchLastSection( false ); и получаю счастье :) Название: Re: Ресайз колонок в QTreeWidget Отправлено: Kolobok от Октябрь 08, 2010, 14:44 Что-то я не пойму, почему у QTreeWidget нет слота resizeColumnsToContents(), которые должен наследоваться от QTreeView. слот resizeColumnToContents( int ) присутствует тем не менее. В исходниках не нашел причины. Где он? :) У QTreeView нет такого слота. это у QTableView. Покажи мне. © Морфеус Мне не лень читать асистент. И прежде чем написать, я это проверил. И это Цитировать "так в ассистенте все ответы... лень читать что ли... ??" © Kolobok не принадлежит мне.Название: Re: Ресайз колонок в QTreeWidget Отправлено: andrew.k от Октябрь 08, 2010, 14:56 "так в ассистенте все ответы... лень читать что ли... ??" © Kolobok Мне не лень читать асистент. И прежде чем написать, я это проверил. И это Цитировать "так в ассистенте все ответы... лень читать что ли... ??" © Kolobok не принадлежит мне.Название: Re: Ресайз колонок в QTreeWidget Отправлено: andrew.k от Октябрь 08, 2010, 15:00 Цитировать Мне не лень читать асистент. И прежде чем написать, я это проверил. И это А что ты скажешь на это? resizeColumnToContents(int) (http://doc.trolltech.com/4.4/qtreeview.html#resizeColumnToContents) Название: Re: Ресайз колонок в QTreeWidget Отправлено: Kolobok от Октябрь 08, 2010, 15:13 Что-то я не пойму, почему у QTreeWidget нет слота resizeColumnsToContents(), которые должен наследоваться от QTreeView. слот resizeColumnToContents( int ) присутствует тем не менее. В исходниках не нашел причины. Где он? :) Найди два отличия. Название: Re: Ресайз колонок в QTreeWidget Отправлено: andrew.k от Октябрь 08, 2010, 15:21 Что-то я не пойму, почему у QTreeWidget нет слота resizeColumnsToContents(), которые должен наследоваться от QTreeView. слот resizeColumnToContents( int ) присутствует тем не менее. В исходниках не нашел причины. Где он? :) Найди два отличия. |