Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Qt. Mejor estrategia para asociar una tabla a un combo

Estas en el tema de Qt. Mejor estrategia para asociar una tabla a un combo en el foro de C/C++ en Foros del Web. Bueno, esto de Qt no es tan fácil como yo creía Llevo todo el día peleándome con un problema, pero la verdad es que a ...
  #1 (permalink)  
Antiguo 30/11/2014, 15:11
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Qt. Mejor estrategia para asociar una tabla a un combo

Bueno, esto de Qt no es tan fácil como yo creía

Llevo todo el día peleándome con un problema, pero la verdad es que a estas alturas ni siquiera sé cual es la mejor estrategia para acometerlo.

Se trata de un menú en el que se configuran diversos aspectos del programa y se define información que luego ha de ser usada.
Estos campos están agrupados por categorías.
La idea es tener un QComboBox, cuyos miembros al ser seleccionados mostrarán una tabla con la información y parámetros que hay que rellenar.

Mi primer planteamiento fue tener un QStackedWidget, con tantas tablas apiladas (QTableWidget en este caso) como categorías existan. Así, cada vez que cambie desde el combo la categoría, se me muestra la tabla asociada.

Pero luego pensé que podía dejar el diseño más abierto, de forma que sólamente hubiera una tabla, la cual se rehará cada vez que cambie la categoría.
Este diseño me permite que la interfaz sea totalmente independiente de los datos que la suministran, y la verdad es que me gusta mas.
Si en un futuro quiero añadir mas datos o categorías, el diseño del formulario no varía.

Solo hay un pero....que no me sale, y llevo todo el día peleándome con ello.
El mayor problema es que no puedo establecer un sistema de señales/slots, ya que el QComboBox tiene una señal con un int como parámetro, y yo puedo crear una función para hacer/modificar la tabla, pero siempre he de pasarle los datos, por lo que no me coinciden las firmas de las funciones.
Esta es mi clase:

fichero .h
Código C++:
Ver original
  1. class DialogoDatosGenerales : public QDialog, private Ui::DialogoDatosGenerales
  2. {
  3. ................................
  4. private slots:
  5.     void CrearTablaDatosGenerales(Datos *D);
  6. }
Pero claro, la conexión señal/slot debería ser así:
Código C++:
Ver original
  1. QObject::connect(this->comboListaDatos, SIGNAL(currentIndexChanged(int)),
  2.                      this->TablaDatosGenerales,SLOT(CrearTablaDatosGenerales(D)));

Antes de tirar la toalla y resignarme al diseño con QStackedWidget...¿alguien se anima a darme una buena idea?
__________________
Mi calculadora en Qt

Última edición por dehm; 30/11/2014 a las 15:47
  #2 (permalink)  
Antiguo 30/11/2014, 15:48
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Qt. Mejor estrategia para asociar una tabla a un combo

A ver, para mostrar las tablas de datos lo mejor es hacer uso del sistema de modelos que tiene Qt... al principio no es algo demasiado obvio de usar pero la verdad es que es extremadamente potente. Los modelos heredan de QAbstractItemModel o de alguna de sus derivadas especializadas para mostrar información en tablas (QAbstractTableModel) o en listas (QAbstractListModel). Una vez creado el modelo, basta con enchufarlo a cualquier QTableView, QListView, QComboBox, ... a través del método "setModel" y el widget se rellenará automáticamente con los datos facilitados por el modelo.

Por otro lado, bien es cierto que no puedes cambiar la señal que emite el QComboBox, sin embargo, no tienes por qué conectar directamente el widget con tu tabla, puedes usar un slot intermedio que, en base al "currentIndex" del QComboBox, le facilite a la tabla los datos correctos.
  #3 (permalink)  
Antiguo 01/12/2014, 04:02
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Qt. Mejor estrategia para asociar una tabla a un combo

Hola eferion:

Pues la verdad es qiue había recurrido a un QTableWidget porque los datos a rellenar son sencillos y ni siquiera son dinámicos.
Son tablas de dos columnas, en una de ellas la leyenda y en la otra la variable o dato a definir o modificar y eso ya está predefinido

Pero la verdad es que definiendo un modelo asociado, puedo tener más flexibilidad a la hora de cambiar la fuente de los datos, así que me pondré en ello.
Espero marcar como solucionado el tema a lo largo del día
__________________
Mi calculadora en Qt
  #4 (permalink)  
Antiguo 01/12/2014, 04:08
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Qt. Mejor estrategia para asociar una tabla a un combo

Los modelos de Qt tienen sus cosas buenas y sus cosas malas:

Las buenas:

* Flexibilidad: El mismo modelo puede ser reutilizado en vistas diferentes (QTreeView, QTableView, QListView, QComboBox ) sin modificar una sola línea de su código

* Dinamismo: Si entre el modelo y la vista insertas un QSortFilterProxyModel puedes filtrar y/o ordenar los elementos del modelo sin apenas escribir una sola línea de código adicional.

La mala:

* Hay que programar el modelo y eso requiere algo de práctica y grandes dosis de paciencia a la hora de testear, sobretodo si se trata de un modelo de árbol.

Si tienes alguna duda sobre modelos no dudes en preguntar.

Un saludo.

Etiquetas: asociar, clase, combo, estrategia, fichero, funcion, int, programa, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:28.