[Kde-devel-es] Transparencias en splash

Ignacio Cárdenas iakynet at wanadoo.es
Tue Sep 6 18:12:28 CEST 2005


> Ahora me asalta otra duda. Estoy cacharreando con la clase QSplashScreen.
> Parece bastante sencilla. Lo que yo quiero hacer es algo que vi hace tiempo
> en el Acrobat Reader de Windows; El splashScreen es una imagen con
> transparencias, y da un aspecto muy innovador.
>
> Lo primero que he probado ha sido, como no, dar transparencia a la imágen
> png que utilizo como splash, pero parece que no funciona. Luego he estado
> mirando QPixmap, para ver si esque hay que habilitar algún atributo para
> que la transparencia se haga efectiva, pero no encuentro nada.
>
> Quizás lo que estoy tratando hacer sea imposible (no lo creo :). ¿Se os
> ocurre cómo se podría hacer algo así?

Bueno... imposible no es... 

La cosa consiste en que debes aplicar una máscara al QSplashScreen, de modo 
que sólo se muestre visible la zona que tu elijas mediante la máscara (la 
cual, probablemente, se corresponderá con el png que quieres poner en primer 
plano).

Para aplicar una máscara se utiliza el método setMask() de la clase QWidget, 
pasándole como parámetro un bitmap, en el cual los bits a 1 representan zonas 
opacas y los bits a 0 zonas transparentes.

A efectos prácticos, la cosa consiste en crear un bitmap a partir de la imagen 
png que quieras que aparezca opaca mediante este código:

QImage img("imagen.png");
QPixmap p;
p.convertFromImage( img );
if ( !p.mask() ) {
	if ( img.hasAlphaBuffer() ) {
		QBitmap bm;
		bm = img.createAlphaMask();
		p.setMask( bm );
	} else {
		QBitmap bm;
		bm = img.createHeuristicMask();
		p.setMask( bm );
	}
}

A continuación creamos nuestro QSplashScreen, lo inicializamos con la imagen 
png y le aplicamos la máscara:

QSplashScreen *sp = new QSplashScreen(p);
if (p.mask())
	sp->setMask(*p.mask());

Y ya está. Espero que el resultado sea el deseado.

Tan sólo aclarar unas cosas: 

- la primera, que este código proviene de una de los ejemplos que vienen con 
la librería Qt, llamado "tux" ($QTDIR/examples/tux).

- la segunda, que esta idea está discutida en la lista de correo de 
qt-interest, de donde yo saqué la idea, y en la cual podrán encontrar más 
información:

http://lists.trolltech.com/qt-interest/2003-07/thread01461-0.html

- y la tercera, que no se si lo que te he dicho funcionará, pero tiene buena 
pinta :-)

Un saludo,
Ignacio.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://mail.kde.org/pipermail/kde-devel-es/attachments/20050906/a6a36a1b/attachment.pgp


More information about the Kde-devel-es mailing list