QListWidget, который изменяет изменение вместо прокрутки

StackOverflow https://stackoverflow.com/questions/3685161

  •  02-10-2019
  •  | 
  •  

Вопрос

Как вы меняете поведение QListWidget Так что это изменяет его размер вместо того, чтобы выбрать (казалось бы, произвольную) высоту и добавление прокрутки? Смотрите скриншот:

screen shot

То 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 класс и использовать эту информацию? Предлагаю вам пересчитать размер вашего виджета в той же функции, где вы добавляете его к нему. В то время как несколько не хватает элегантности, это, кажется, довольно надежное решение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top