QListWidget que cambia de tamaño en lugar de rollos
-
02-10-2019 - |
Pregunta
¿Cómo se cambia el comportamiento de un QListWidget
de modo que cambia el tamaño de su altura en lugar de elegir una altura (aparentemente arbitraria) y la adición de barras de desplazamiento? Ver captura de pantalla:
Los de QListView
debe llenar todo el espacio horizontal, ya que pueden (la creación de la mayor cantidad de "columnas", si se quiere.) Luego envolver y hacer tantas filas como sea necesario para adaptarse a todos los artículos. Estos cálculos deben ajustarse como se cambia el tamaño de la ventana. Esto es todo funciona bien.
Sin embargo, lo que quieren a suceder es que en lugar de la altura se mantiene igual, el QListView
debe ampliarse o reducirse en forma vertical y no necesita ninguna barras de desplazamiento. El movimiento en sentido vertical, de ser necesario, se manejará en el QWidget
padres que todos los anfitriones de las etiquetas y listas. Parece que una vez establecida la altura de la QListWidget
(no sé donde su valor por defecto está viniendo), que nunca cambia. Es demasiado grande en algunos casos (véase la segunda lista de "prueba" más arriba) y demasiado pequeños en otros (ver primero "en blanco mapas" lista anterior).
La disposición anterior es nada sorprendente: dos de QLabel
y dos QListWidget
de en un QVBoxLayout.
Estas son las propiedades que he expuesto en el QListWidget
:
setMovement(QListView::Static);
setResizeMode(QListView::Adjust);
setViewMode(QListView::IconMode);
setIconSize(QSize(128, 128));
(Ya he intentado establecer las políticas de la barra de desplazamiento horizontal y vertical, sino que simplemente hace girar las barras de desplazamiento fuera, recorte el contenido. No es lo que quiero.)
Solución
Tal vez usted podría esto sin usar QListWidget. ejemplos de la Qt contienen una nueva clase de diseño, QFlowLayout, que podría ser útil. Con el siguiente tipo de control jerarquía se podía obtener múltiples grupos con etiquetas y todos ellos estaría dentro de una QScrollArea.
QScrollBox
QVBoxLayout
QLabel "Blank maps"
QWidget
QFlowLayout
your own widgets showing map images and labels
QLabel "Text"
QWidget
QFlowLayout
your own widgets
El problema es que este tipo de solución crearía mucho más widgets que solución basada QListWidget. Así que si usted tiene cientos de elementos de la lista, esto podría no ser la mejor solución.
Otros consejos
Hay una función miembro protegido denominado contentsSize()
en QListView
. Se utiliza para calcular el minimum()
necesario, maximum()
, y pageStep()
para las barras de desplazamiento (como se mencionó aquí ).
Puede usted subclase de la clase QListView
y hacer uso de esa información? Le sugiero que vuelva a calcular el tamaño de su widget en la misma función donde puede añadir contenidos a la misma. Mientras tanto carente elegancia, esto parece ser una solución muy fiable.