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:

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.)

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top