Название: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: andrew.k от Январь 28, 2011, 02:35 Подскажите, как расположить элементы в списке в несколько колонок.
QListWidget на сколько я понял не поддерживает колонки. Кути 4. Что мне нужно. У меня довольно много айтемов (порядка 60-70). Они checkable. Пользователь должен отметить необходимые. Если их расположить как обычно (в одну колонку), получится длинный список с полосой прокрутки, что очень неудобно и затрудняет поиск нужного элемента. Поэтому хотелось бы расположить их в списке так, чтобы они по возможности были видны все, либо как можно больше. Для этого хочу использовать колонки. Если элементы будут расположены в несколько колонок (3-4), то это будет удобно. Но как этого добиться в QTreeWidget я не понял. И возможно ли вообще такое. В свое время писал на VCL, там у списка была такая возможность. Просто задаешь количество колонок и элементы сами располагались в новой колонке, когда в текущей места больше нет. Соответственно при изменении размера списка, элементы пересортировывались, занимая свободное пространство. Или может кто другой способ подскажет? Хелп, пипл :) Название: Re: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: andrew.k от Январь 28, 2011, 02:51 Нашел нечто похожее, но это не подходит, просто чтобы понять, что мне требуется.
В QListWidget свойство viewMode поставил в IconMode. Элементы стали располагаться в несколько колонок. Но 1) длинные названия элементов листвиджет сокращает, оставляя в конце многоточие, это не подходит; 2) элементы можно свободно перетаскивать. это не нужно и нелепо выглядит. Мне нужно как обычно сделано в диалоге выбора файлов, много имен в нескольких колонках и иконка рядом, а у меня вместо иконки чекбокс (как сделать чекбокс у элемента объяснять не нужно). Так же я не понял, что делает свойство modelColumn. Название: Re: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: Kolobok от Январь 28, 2011, 02:53 Посмотри эти методы QListView
setWrapping ( bool enable ) setFlow ( Flow flow ) setGridSize ( const QSize & size ) Название: Re: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: andrew.k от Январь 28, 2011, 03:02 Только что нашел, isWrapping.
Похоже это то, что нужно. Сейчас посмотрю остальные. GridSize уже смотрел. Не понял его назначения. Он уродует список :) Название: Re: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: andrew.k от Январь 28, 2011, 03:04 понял с GridSize его нужно использовать совместно с wrapping, а то ерунда получается. :)
В любом случае размер у всех разный, поэтому задавать фиксированный не подходит. Название: Re: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: andrew.k от Январь 28, 2011, 03:13 Спасибо колобок.
Осталось три вопроса. 1. Как запретить ему сокращать названия элементов? Так как элементы расположены очень плотно, то он сокращает текст (многоточие в конце). При чем не только у длинных. Даже у коротких. 2. Почему все элементы сбились в угол и не перемещаются с изменением размера списка. А так и сидят на месте. 3. Как задать количество колонок, например я хочу 2 или три строго. А он заполняет абы как, где место есть. В одной строке может оказаться 3 элемента в другой уже 2. Выглядит как хаос :) Название: Re: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: andrew.k от Январь 28, 2011, 03:17 п.2 удалось починить играясь со свойствами. На сколько я понял layuotMode помог. Выставил Batched вместо SinglePass.
Теперь меня интересует только п.1 Название: Re: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: andrew.k от Январь 28, 2011, 03:30 Когда создаю элементы в дизайнере, то ничего не сокращается, текст показывается полностью независимо от длины.
А в итоге получается с многоточием на конце. Где грабли? Еще вопрос возник, как сделать, чтобы все айтемы были по умолчанию с чекбоксом? Сейчас программно ставлю setCheckState( Unchecked ). Тогда появляется чекбокс. Даже в дизайнере, чтобы появился чекбокс, нужно сначала поставить Checked, потом Unchecked. Выглядит так, как будто из-за появившегося чекбокса, чуть-чуть текста не поместилось. Как раз 2-3 буквы. Почему так? Нормально ли это? Название: Re: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: andrew.k от Январь 28, 2011, 11:22 Вот скрин проблемы. Даже у коротких айтемов обрезаются две последних буквы. Почему?
(http://imglink.ru/thumbnails/28-01-11/f1278dc0ff40384c6d1dd9eec1ba9aa7.jpg) (http://imglink.ru/show-image.php?id=67f48e8d74144bfd0763c878cd3bef69) Название: Re: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: Kolobok от Январь 28, 2011, 11:43 1. Как запретить ему сокращать названия элементов? Так как элементы расположены очень плотно, то он сокращает текст (многоточие в конце). При чем не только у длинных. Даже у коротких. Посмотри QAbstractItemView::setTextElideMode ( Qt::TextElideMode mode ) 3. Как задать количество колонок Может лучше взять QTableWidget Еще вопрос возник, как сделать, чтобы все айтемы были по умолчанию с чекбоксом? По умолчанию - нужно свою модель писать. Название: Re: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: andrew.k от Январь 28, 2011, 14:19 1. Как запретить ему сокращать названия элементов? Так как элементы расположены очень плотно, то он сокращает текст (многоточие в конце). При чем не только у длинных. Даже у коротких. Посмотри QAbstractItemView::setTextElideMode ( Qt::TextElideMode mode ) Сейчас вот так выглядит. (http://imglink.ru/thumbnails/28-01-11/79c51251eee7680cd9edf5e12a1a9215.jpg) (http://imglink.ru/show-image.php?id=b3a27ca1813a3ca5e8381f0fe79df037) Что ему мешает сделать колонки шире? тем более треть ширины пустует. Он их пытается распределить в три колонки. Зачем. Хотя недавно было по-другому и не влезали только две буквы :) 3. Как задать количество колонок Может лучше взять QTableWidget Мне это нужно просто для экономии места на экране. Еще вопрос возник, как сделать, чтобы все айтемы были по умолчанию с чекбоксом? По умолчанию - нужно свою модель писать. Я о другом, у только что созданного айтема, если посмотреть флаги, установлен флаг UserCheckable, но чекбокса нет. Как так? И его никак не отобразить. Он появляется только после того как я делаю item->setCheckState( Unchecked ); Хотя один раз у меня получилось как-то и айтемы создавались сразу с чекбоксом без дополнительных действий. Название: Re: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: andrew.k от Январь 28, 2011, 14:59 Наконец-то удалось получить то, что нужно.
isWrapping true resizeMode adjust flowTopToBottom layoutMode SinglePass wordWrap false Название: Re: Расположение колонками в списке (QListWidget или QTreeWidget) Отправлено: andrew.k от Январь 28, 2011, 15:11 сейчас подумал, что удобнее сделать flow LeftTopRight
Но если ставлю LeftToRight получаю такую хрень. Хотя до этого у меня получалось в две ровные колонки слева направо и вниз. Сейчас нет :) Трындец с этим списком ) (http://imglink.ru/thumbnails/28-01-11/b0d1bf34c701a9b1e4d2bf504633f6e6.jpg) (http://imglink.ru/show-image.php?id=445d7c57a9cbe78f56cd3c267b2a70ee) |