2011-05-14 15 views
14

Digamos que necesito mostrar una lista de elementos. Cada elemento contiene un QPushButton una imagen y algo de texto. Cuando un usuario hace clic en el botón, debe pasar algo (es decir, necesito obtener la señal). ¿Cuál es la forma correcta de implementar esto en Qt?QListWidget o QListView con QItemDelegate?

Después de leer un poco, entiendo que si uso un QListWidget y QListWidgetItem, esto se puede lograr. Puedo subclase cada QListWidgetItem de acuerdo con mis necesidades y configurarlos en el widget de lista.

Sin embargo, también he leído que un enfoque más apropiado (Ver el modelo de aproximación) es utilizar un QListView junto con un QItemDelegate. Pero si uso QItemDelegate, parece que solo puedo pintar los widgets. ¿Cómo puedo obtener el evento de botón pulsador?

Lo siento por este gran mensaje. Estoy algo confundido acerca de todo el concepto de cuándo usar QListWidget/QListView.

Respuesta

13

QListWidget es esencialmente una versión personalizada de QListView, diseñado para casos de widgets estándar de la lista, cuando todo lo que hacemos tiene que limitarse a presentar gráficos o de texto elementos de una lista y la relación con el modelo básico es muy claro.

Con QListWidget y su clase asociada QListWidgetItem puede, p. Ej. inserte y quite elementos muy fácilmente. Pero si vas a insertar QPushButtons, entonces usted no puede utilizar este modo puede ser que también acaba de utilizar y su QListView (heredado) métodos para configurar el widget para un índice dado.

En cuanto a la señal, ya que va a crear los QPushButton s, sólo tiene que utilizar

QObject::connect(my_button, SIGNAL(clicked()),...) 

que lidiar con eso.

+0

Gracias por su valiosa opinión. Entiendo que usar QListView es el enfoque más ligero y preferido. Solo necesito mostrar una lista de 5 a 6 elementos. Y necesito iconos y botones dentro de cada celda. Probablemente vaya con QListWidget y setIndexWidget por ahora ya que parece reducir el tiempo de desarrollo. –

+0

@Mahadevan ¡Suena bien, feliz de ayudar! –

+2

Aparentemente puede usar un widget personalizado en 'QListWidgetItem'. Ver este tema: http://qt-project.org/forums/viewthread/17953 – mydoghasworms

6

Para diferir de la respuesta de Matt, parece que se puede utilizar su propio widget en un QListWidgetItem, como se ha señalado en este mensaje el qt-project.org: http://qt-project.org/forums/viewthread/17953.

Esto podría ser útil si sólo tiene unos pocos datos para mostrar y no está interesado en la molestia de cocinar una clase del modelo.

+0

Link ayudó mucho. ¡Gracias! –

Cuestiones relacionadas