Guardando automáticamente los tamaños de los formularios en AbanQ
Como comentaba en un post anterior, hay determinados detalles que pueden marcar el éxito de una aplicación, y uno de ellos es la interfaz gráfica sin duda. En AbanQ uno de los puntos que he encontrado deficiente, ha sido el de guardar el tamaño de los formularios (o ventanas) de la aplicación según el gusto del usuario. La idea: se abre el formulario, y el usuario redimensiona la ventana para verla según su gusto. Cuando cierra ese formulario y vuelve a abrirlo espera el mismo tamaño, y no el antiguo, que puede resultarle incómodo.
Para redimensionar formularios, y guardar su tamaño, la librerías Qt son especialmente válidas (de hecho, el estándar en Qt es hacer formularios o ventanas (widgets) redimensionables).
Voy a explicar los cambios que habría que hacer en el código de AbanQ para conseguir esto: La idea es que guardaremos en el registro (en los “settings” que definen Qt, que es el registro de Windows en la versión de Windows o en archivos de configuración en el home del usuario en el caso Unix) el tamaño de la ventana cuando el usuario la cierra, y redimensionaremos la ventana al abrirla según el último tamaño guardado del usuario.
Los cambios los aplicaremos en las tres clases que controlan los tres tipos de formularios de AbanQ: FLFormDB, FLFormSearchDB y FLFormRecordDB
Nos vamos, por ejemplo a FLFormDB, y utilizaremos la clase QSettings para guardar en el registro de la aplicación. Nos vamos al método setMainWidget, y añadimos al final lo siguiente
QSettings settings; settings.setPath( "InfoSiAL", "FacturaLUX", QSettings::User ); QString keybase( "/facturalux/lite/formularios/" ); int x = settings.readNumEntry( keybase + "FLFormDB" + name_ + "x", 0 ); int y = settings.readNumEntry( keybase + "FLFormDB" + name_ + "y", 0 ); int width = settings.readNumEntry( keybase + "FLFormDB" + name_ + "w", 0 ); int h = settings.readNumEntry( keybase + "FLFormDB" + name_ + "h", 0 ); if ( x > 0 && y > 0 && width > 0 && h > 0 ) this->setGeometry(x, y, width, h);
El código es bastante autoexplicativo: leemos del registro, por cada formulario, el tamaño guardado. La clave en el registro la componemos indicando el tipo de formulario, más el nombre de la tabla que muestra el formulario.
Si AbanQ utilizara las Qt4 podría guardarse en el registro el objeto QRect del tirón, pero como utiliza una versión más antigua, la 3, debemos guardar cada componente del rectángulo.
Para guardar el tamaño del formulario, sólo hay que agregar el siguiente código al evento closeEvent:
QSettings settings; settings.setPath( "InfoSiAL", "FacturaLUX", QSettings::User ); QString keybase( "/facturalux/lite/formularios/" ); QRect geo = this->geometry(); settings.writeEntry( keybase + "FLFormDB" + name_ + "x", geo.x() ); settings.writeEntry( keybase + "FLFormDB" + name_ + "y", geo.y() ); settings.writeEntry( keybase + "FLFormDB" + name_ + "w", geo.width() ); settings.writeEntry( keybase + "FLFormDB" + name_ + "h", geo.height() );
Este mismo cambio se aplica a las clases FLFormSearchDB y FLFormRecordDB. Adicionalmente, a la clase FLFormDB y sólo a esta clase debemos cambiar un par de detalles más en los métodos initMainWidget y showForDocument, donde hay llamadas al método resize del formulario. Debemos sustituir la llamada siguiente
this->resize( size().expandedTo( mainWidget_->size() ) );
por lo siguiente
QSettings settings; settings.setPath( "InfoSiAL", "FacturaLUX", QSettings::User ); QString keybase( "/facturalux/lite/formularios/" ); int width = settings.readNumEntry( keybase + "FLFormDB" + name_ + "w", 0 ); int h = settings.readNumEntry( keybase + "FLFormDB" + name_ + "h", 0 ); QSize tamanio = QSize(width, h); this->resize( size().expandedTo( tamanio ) );
Os adjunto los Diffs para aplicar a los fuentes de AbanQ y disfrutar de estos cambios.
Para aplicarlos, debéis dejarlos en el mismo nivel que el directorio abanq-2.3-linux-src en el que se descomprimen los fuentes de AbanQ o bien, editarlos y ajustar las rutas.
2 Marzo 2009 at 6:41 pm
Hola David,
yo también estoy dándole a esto de los erps…
me he bajado el factulux.zip que habías puesto con los colores adaptados a Windows pero no puedo seleccionar el tipo de base de datos Postgres en la pantalla de login.
Un saludo
2 Marzo 2009 at 8:26 pm
Ummm, eso es porque no te está pillando el driver de PostgreSQL. ¿Te está pillando MySQL o SQLite?
Esa versión que está ahí puesta tiene que instalarse obligatoriamente en C:\facturalux, ya que AbanQ tiene en hardcode la ruta. Asegúrate que dentro de c:\facturalux\plugins\sqldrivers\ tienes el archivo qpsql.dll y que el archivo pq41.dll están en c:\facturalux\bin. Por otro lado, es posible que te pida el archivo libpq73.dll … ese lo puedo subir, o lo puedes encontrar en las páginas de PostgreSQL.
Cuéntame si tienes esto en estos sitios, y si tienes disponible MySQL o SQLite…