Hola.
En aplicaciones de determinados entornos empresariales es necesario trabajar con la gestión de imágenes, ya sea como mapas de bits o vectoriales.
Cuando en un formulario hay que superponer imágenes para mostrar despieces o tampones superpuestos es necesario que éstas dispongan del canal de transparencia en la información del color.
Si necesitamos guardar nuestras imágenes en la base de datos Velneo, únicamente disponemos del campo Objeto Dibujo para almacenar imágenes jpeg. En este tipo de campo se pierde la información del canal alfa o transparencia.
Por lo tanto necesitamos un mecanismo que nos permita almacenar las imágenes con transparencia en formato PNG para poder superponerlas en el formulario.
En Velneo no disponemos de un control que nos permita visualizar una imagen creada de forma dinámica. El objeto del API VImageWidget (control del formulario para dibujos estáticos) sería el candidato perfecto.
La idea consiste en solucionar esta limitación aplicando estas dos acciones:
- Almacenar las imágenes en el campo Objeto Binario que no altera el archivo original, preservando todas sus características.
- Usar el control Botón para mostrar las imágenes en el formulario después de obtener un objeto VImage del API.
El código javascript del API es muy sencillo:
// Script que muestra la imagen del campo Binario en un Botón del formulario
importClass("VImage")
// Obtiene la referencia al control Botón
var oDib = theRoot.dataView().control("CMD_CUA_DIB")
// Crea una nueva imagen
var oImagen = new VImage()
// Obtenemos un ByteArray desde el campo Binario
var oBinario = theRegisterIn.fieldToByteArray("IMAGEN_BIN")
// Cargamos la imagen PNG desde el ByteArray y lo asignamos al Icono del Botón
if (oImagen.loadFromData(oBinario, "PNG")) {
oDib.setIcon(oImagen)
}
Por último asignamos el siguiente CSS al Botón del formulario para que se muestre correctamente la imagen:
QPushButton {
background-color: transparent;
padding: 0px;
qproperty-iconSize: 200px;
}
Ahora solo nos queda superponer los Botones con las imágenes en un Layout y voilà.
Saludos
Paco Satué