Russian Qt Forum
Ноябрь 25, 2024, 14:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QListWidget и минимальный размер  (Прочитано 4952 раз)
Sokoloff
Гость
« : Ноябрь 08, 2009, 15:07 »

Мне нужно сделать нечто вроде диалога настроек, где слева в QListWidget сверху вниз располагаются значки с подписями в соответствии с разделами. Мне нужно, чтобы этот список всегда принимал минимальную ширину, так, чтобы в нём помещались все значки и в то же время, чтобы не было пустого места. Как этого можно добиться?

Этот вопрос уже поднимался 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-а внутренние размеры? 
Записан
Makss
Гость
« Ответ #1 : Ноябрь 08, 2009, 16:21 »

это рамка видгета, чтобы узнать её есть функция lineWidth
Записан
Sokoloff
Гость
« Ответ #2 : Ноябрь 08, 2009, 17:02 »

это рамка видгета, чтобы узнать её есть функция lineWidth
Нет lineWidth у меня равна 1, да и вообще никак на внешний вид листа не влияет.
Записан
Makss
Гость
« Ответ #3 : Ноябрь 08, 2009, 17:08 »

ещё frameWidth есть и midLineWidth, посмотри все эти параметры
Записан
Sokoloff
Гость
« Ответ #4 : Ноябрь 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 - ширина полей.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.068 секунд. Запросов: 20.