2012-06-18 17 views
15

Estoy tratando de crear un panel lateral plegable similar al del Diseñador de Qt (vea la captura de pantalla adjunta). Parecen ser QListViews colocados en algún tipo de widget colapsable.¿Hay un componente estándar para el panel plegable en Qt?

enter image description here

Busqué en Google para "panel desplegable Qt" y parece que no hay un componente estándar para esto, o al menos no con ese nombre. Entonces, ¿alguien sabe si algún componente Qt estándar tiene el mismo comportamiento? Si no, ¿alguien puede sugerir cómo puedo construirlo?

Gracias.

+2

¿No es el comportamiento lo mismo que un QTreeView? Los elementos de nivel superior son las categorías de widgets y los elementos de nivel inferior son los widgets en sí mismos. Tal vez pueda subclasificar un QTreeView y personalizar el aspecto de los elementos de nivel superior y hacer que se amplíen con un solo clic. – Claudio

Respuesta

13

Decidí seguir el enfoque general presentado en el enlace proporcionado por Joey.

Específicamente, creé un widget para cada lista plegable. Este widget consiste en un QPushButton en la parte superior y un QListView en la parte inferior.

Luego, conecté el botón de señal de clic a un controlador para alternar la geometría de la QListView entre tener una altura de 0 cuando está oculta y su altura original cuando reaparece.

Me parece que este enfoque es mucho más simple en comparación con la personalización del evento de pintura como lo sugiere Claudio. Además, puedo usar QAnimationProperty para animar el cambio en la geometría para hacer que la lista parezca "deslizarse" dentro y fuera de la vista.

Pero de todos modos, ¡gracias por las respuestas!

+2

Quizás no necesite personalizar el evento de pintura, podría ser suficiente para ajustar el estilo de visualización. Para los elementos de nivel superior, establece la alineación centrada, el fondo diferente y el ícono de un triángulo apuntando hacia abajo cuando se expanden, y apaga las decoraciones raíz. Las animaciones son manejadas por QTreeView. La ventaja es que solo tiene que proporcionar un modelo de árbol, sin importar cuántos elementos de nivel superior haya. Con su solución, si agrega una categoría, debe modificar su widget y sus artículos se distribuyen en varias vistas. Si esto no le concierne, entonces su solución debería estar bien. – Claudio

+0

Hola. Gracias por la sugerencia. Analizaré la posibilidad de personalizar un QTreeView. Lo que describiste parece de hecho un enfoque más flexible. Pero por el momento solo necesito mostrar elementos en un solo nivel. Mi principal preocupación sigue siendo cómo se verá la interfaz de usuario. Si el QTreeView puede producir el aspecto deseado, iré con él. De todos modos, ¡gracias por la útil pista! – lightalchemist

+10

¿Puedes compartir tu código? – SomethingSomething

Cuestiones relacionadas