Russian Qt Forum

Qt => Model-View (MV) => Тема начата: voltron от Январь 28, 2013, 15:48



Название: Несколько колонок в QListView. Как?
Отправлено: voltron от Январь 28, 2013, 15:48
Возникла необходимость в отображении нескольких колонок элементов в QListView. Нечто похожее на  область просмотра файлов в Проводнике, когда там отображаются имена файлов в несколько столбцов и при изменении размера окна число столбцов и их высота (количество элементов) автоматически меняется.

Рассматривал вариант с использованием QTableView, но там фиксированный размер таблицы, что не подходит.

Можно ли сделать такое в Qt? Если да, то с чего начинать, может, есть примеры кода?

Qt 4.8.2, Windows/Linux/Mac OS


Название: Re: Несколько колонок в QListView. Как?
Отправлено: vintik от Январь 28, 2013, 17:11
Есть виджет QColumnView, можно на него посмотреть. Честно говоря, не помню как там проводник работает..
Кстати, в любой вьюхе можно скрывать колонки. Так что не вижу проблем в использовании QTableView. Главное понять когда и при каких условиях скрывать/отображать определённые колонки.


Название: Re: Несколько колонок в QListView. Как?
Отправлено: GreatSnake от Январь 28, 2013, 17:45
Код
C++ (Qt)
QListView::setFlow( QListView::LeftToRight );
Нет, чтобы просто по-внимательнее посмотреть описание QListView в ассистенте, начинают изобретать велосипед...


Название: Re: Несколько колонок в QListView. Как?
Отправлено: voltron от Январь 29, 2013, 15:58
Код
C++ (Qt)
QListView::setFlow( QListView::LeftToRight );
Нет, чтобы просто по-внимательнее посмотреть описание QListView в ассистенте, начинают изобретать велосипед...

Угу, и будут колонки кривые и косые, вот такие
(http://i50.tinypic.com/2u5ccy9.png)

Посоветуйте невелосипедное решение, чтобы было примерно так при любых изменениях размера окна и произвольных длинах текста
(http://i47.tinypic.com/240zxo1.png)


Название: Re: Несколько колонок в QListView. Как?
Отправлено: GreatSnake от Январь 29, 2013, 16:20
Тогда не выставляй flow и включи wrapping и задай resizeMode:
Код
C++ (Qt)
lv.setResizeMode( QListView::Adjust );
lv.setWrapping( true );
 


Название: Re: Несколько колонок в QListView. Как?
Отправлено: _OLEGator_ от Январь 29, 2013, 17:03
Возможно это поможет:
Код
C++ (Qt)
void QListView::setUniformItemSizes ( bool enable )


Название: Re: Несколько колонок в QListView. Как?
Отправлено: GreatSnake от Январь 29, 2013, 17:07
Возможно это поможет:
Код
C++ (Qt)
void QListView::setUniformItemSizes ( bool enable )
Сей флаг используется только для оптимизации. На отображение он не влияет.
Указанные мной выше правки полностью решают проблему ТС.


Название: Re: Несколько колонок в QListView. Как?
Отправлено: _OLEGator_ от Январь 29, 2013, 21:26
Сей флаг используется только для оптимизации. На отображение он не влияет.
Указанные мной выше правки полностью решают проблему ТС.

А если проверить?
У меня он как раз всем элементам списка размер выставил одинаковый, правда теперь в некоторых элементах текст не помещается и обрезается тремя точками.


Название: Re: Несколько колонок в QListView. Как?
Отправлено: voltron от Февраль 04, 2013, 15:29
Тогда не выставляй flow и включи wrapping и задай resizeMode:
Код
C++ (Qt)
lv.setResizeMode( QListView::Adjust );
lv.setWrapping( true );
 
Спасибо, почти то, что нужно. А можно как-то добиться отображения полных, а не обрезанных подписей?


Название: Re: Несколько колонок в QListView. Как?
Отправлено: GreatSnake от Февраль 04, 2013, 16:55
Спасибо, почти то, что нужно. А можно как-то добиться отображения полных, а не обрезанных подписей?
А зачем включил uniformItemSizes?


Название: Re: Несколько колонок в QListView. Как?
Отправлено: voltron от Февраль 05, 2013, 10:47
А зачем включил uniformItemSizes?
Упс... Виноват, осталось от предыдущих экспериментов. Спасибо, теперь все работает как надо