Modelo de seleccion

Para poder realizar selecciones de elementos (por ejemplo, asistentes para agrupar juntos, listados de habitaciones, o incluso listados de actividades concretas), he pensado en crear un nuevo tipo de modelo que permita recuperar selecciones por parte del usuario.
Seria un modelo derivado de QSortFilterProxyModel, con un QVariantList dentro de el; en el momento en que se seleccione un elemento de una columna especificada, se incluiria el valor.de una columna del modelo base dentro de ese QVariantList, el cual luego se podria recuperar.

Y nuevos problemas con promoted widgets.

Creía que separando los widgets modificados en una nueva librería solucionaría los problemas con los promoted widgets… y tal vez fui demasiado optimista. El mismo error de otras veces se ha vuelto a repetir: la compilación del proyecto falla con un undefined reference al intentar hacer uso de los promoted widgets en AcolitoAsistentes.

El error debe de estar en algún archivo .ui generado por qmake, ya que anteriormente no daba fallo ninguno y todo funcionaba correctamente; ha sido al intentar añadir un nuevo delegado para las categorías cuando la compilación ha dado fallos en un dialogo dentro de la libreria de Acolitos que empleaba dos promoted widgets, un comboBox y un checkBox modificados. Tras eliminar ese delegado, la compilación seguía fallando.

Sigue leyendo

Detalle sobre los delegate


Es necesario reimplementar el método updateEditorGeometry() para poder ajustar el tamaño en los delegados que dibujen controles complejos, como por ejemplo:

void MiDelegadoComboBox::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    editor->setGeometry(option.rect);
}

De no ser así, el editor puede no llenar por completo el campo en la vista.

Modelo de Asistentes, terminado… por ahora

Pues sí, finalmente el modelo de Asistentes para MyAcolito parece estar funcionando correctamente, aunque sea con lo más simple y básico: mostrar datos de asistentes, introducir asistentes, reasignarlos en grupos, introducir grupos de asistentes conjuntos… ha sido más complicado de lo que creía, por un error muy sutil: al asignar los grupos, no cambiaba el filtro que usaba en los asistentes para recuperar los datos y claro, eso me dejaba con el modelo de tabla en un estado que no devolvía todos los datos, sólo los del registro en el que se posicionaba con el select…

¿Cosas que todavía quedan por añadir al modelo? El cambio de categoría para un asistente, por ejemplo.

Sigue leyendo

Cambios en el sistema

Me he dado cuenta de que he cometido un pequeño error en el diseño de la clase MyDatabase y demas… Deberia haberlas preparado para trabajar sobre AcolitoDB y utilizan MyAcolitoDB. Creo que al ser MyDatabase un facade, podria intentar usar una clase padre donde colocar toda la interfaz de clase y reducir el acoplamiento.

MyDatabase… menudo trabajo

O un coñazo, dependiendo de a quien le preguntes. Mi idea original era modelar las conexiones por separado: tengo por un lado una conexión con el alojamiento (MyAlojamiento), otra con los asistentes (MyAsistentes), una para los grupos (MyGrupos) y así hasta la nausea… pero claro, me di cuenta de que todas ellas comparten una única conexión con la base de datos, modelada como MyAcolitoDB, y entonces se fue todo al garete. ¿Cómo podría asegurar, a la hora de cerrar la conexión y volverla a abrir, que se hubieran eliminado todos los modelos y las sentencias lanzadas en cada una de ellas? Porque las señales no te aseguran que se ejecuten los slots de forma secuencial…

Al final, después de darle muchas, muchas vueltas, decidí tirar por la calle de enmedio: un Facade y se acabó. Y dentro del Facade / Singleton, ya tengo las conexiones modelizadas como quiera (un MyAlojamiento, por ejemplo, o un MyAsistentes que me devuelvan los modelos que necesito).

Sigue leyendo