QListWidget, который изменяет изменение вместо прокрутки
-
02-10-2019 - |
Вопрос
Как вы меняете поведение QListWidget
Так что это изменяет его размер вместо того, чтобы выбрать (казалось бы, произвольную) высоту и добавление прокрутки? Смотрите скриншот:
То QListView
Следует заполнить столько места по горизонтали, так как они могут (создавать столько слоев, «если вы будете.) Затем они обернуты и сделают столько строк, сколько необходимо для того, чтобы соответствовать всем предметам. Эти расчеты должны быть скорректированы, поскольку окно изменяется. Это все работает нормально.
Тем не менее, что я хочу случиться так, что вместо высоты пребывания пребывания то же самое, QListView
Должен расти или сжиматься вертикально и никогда не нуждаются в прокрутках. Прокрутка, при необходимости, будет обрабатываться на родительский QWidget
Это проводит все этикетки и списки. Кажется, как только высота QListWidget
Установлено (не уверена, откуда идет по умолчанию), он никогда не меняется. Он слишком большой в некоторых случаях (см. Второй «тестовый» список выше) и слишком маленький в других (см. Сначала «Пустые карты» выше.)
Макет выше ничего удивительного: два QLabel
и два QListWidget
в QVBoxLayout.
Вот свойства, которые я установил на QListWidget
:
setMovement(QListView::Static);
setResizeMode(QListView::Adjust);
setViewMode(QListView::IconMode);
setIconSize(QSize(128, 128));
(Я уже попробовал установить горизонтальную и вертикальную политику прокрутки, но это просто поворачивает прокрутки, отключив контент. Не то, что я хочу.)
Решение
Может быть, вы могли бы это без использования QlistWidget. Примеры QT содержат новый класс макета, QFlowlayout, который может быть полезен. Со следующим видом виджетов иерархии вы можете получить несколько групп с этикетками, и все они будут внутри одной Qccrollarea.
QScrollBox
QVBoxLayout
QLabel "Blank maps"
QWidget
QFlowLayout
your own widgets showing map images and labels
QLabel "Text"
QWidget
QFlowLayout
your own widgets
Проблема в том, что этот вид решения создаст гораздо больше виджетов, чем решение на основе QListwidget. Поэтому, если у вас есть сотни предметов в вашем списке, это может быть не лучшее решение.
Другие советы
Существует защищенная функция элементов вызывается contentsSize()
в QListView
. Отказ Используется для расчета необходимого minimum()
, maximum()
, а также pageStep()
для прокрутки (как упоминалось здесь).
Можете ли вы подкласс QListView
класс и использовать эту информацию? Предлагаю вам пересчитать размер вашего виджета в той же функции, где вы добавляете его к нему. В то время как несколько не хватает элегантности, это, кажется, довольно надежное решение.