Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Sokoloff от Ноябрь 08, 2009, 15:07



Название: QListWidget и минимальный размер
Отправлено: Sokoloff от Ноябрь 08, 2009, 15:07
Мне нужно сделать нечто вроде диалога настроек, где слева в QListWidget сверху вниз располагаются значки с подписями в соответствии с разделами. Мне нужно, чтобы этот список всегда принимал минимальную ширину, так, чтобы в нём помещались все значки и в то же время, чтобы не было пустого места. Как этого можно добиться?

Этот вопрос уже поднимался http://www.prog.org.ru/topic_5536_0.html (http://www.prog.org.ru/topic_5536_0.html), но у меня продолжение темы.
Написал я такой код:
Код
Python
pl = self.form.pagesList
width = 0
for i in xrange(0, pl.count()):
 item = pl.item(i)
 width = max(width, pl.fontMetrics().width(item.text()))
 
width = width + 48
pl.setMaximumWidth(width)
 
for i in xrange(0, pl.count()):
 item = pl.item(i)
 h =  pl.iconSize().height() + pl.fontMetrics().height() + 8
 item.setSizeHint(QSize(width-6, h))
 
Все работает, но смущает "магическое" число 6 в последней строке, полученное эмпирически. Похоже, это удвоенный отступ Item-а от внешнего края Widget-а. Можно его получить из какой-то функции? Или как задать/получить для widget-а внутренние размеры? 


Название: Re: QListWidget и минимальный размер
Отправлено: Makss от Ноябрь 08, 2009, 16:21
это рамка видгета, чтобы узнать её есть функция lineWidth


Название: Re: QListWidget и минимальный размер
Отправлено: Sokoloff от Ноябрь 08, 2009, 17:02
это рамка видгета, чтобы узнать её есть функция lineWidth
Нет lineWidth у меня равна 1, да и вообще никак на внешний вид листа не влияет.


Название: Re: QListWidget и минимальный размер
Отправлено: Makss от Ноябрь 08, 2009, 17:08
ещё frameWidth есть и midLineWidth, посмотри все эти параметры


Название: Re: QListWidget и минимальный размер
Отправлено: Sokoloff от Ноябрь 08, 2009, 20:19
ещё frameWidth есть и midLineWidth, посмотри все эти параметры
Спасибо, это действительно frameWidth.
Итого, окончательный код (может кому пригодиться) таков:
Код
Python
pl = self.form.pagesList
 
width = 0
for i in xrange(0, pl.count()):
 item = pl.item(i)
 width = max(width, pl.fontMetrics().width(item.text()))
 
width = width + 42
 
for i in xrange(0, pl.count()):
 item = pl.item(i)
 h =  pl.iconSize().height() + pl.fontMetrics().height() + 8
 item.setSizeHint(QSize(width, h))
 
pl.setMaximumWidth(width + 2 * pl.frameWidth())
 
42 и 8 - ширина полей.