Módulo 8: Iconos, Recursos y Recursos Visuales
Incorpora imágenes, iconos y recursos gráficos a tus interfaces
Incorpora imágenes, iconos y recursos gráficos a tus interfaces
---
Objetivos de Aprendizaje
Al finalizar este módulo serás capaz de:
- Crear y gestionar archivos de recursos (.qrc)
- Usar imágenes en Labels mediante la propiedad pixmap
- Agregar iconos a botones y elementos de menú
- Usar imágenes de fondo y bordes con Style Sheets
- Seleccionar los formatos de imagen adecuados para cada caso
- Organizar recursos con prefixes
- Encontrar y usar iconos gratuitos de alta calidad
---
8.1 El Resource System de Qt
Qt tiene un sistema de recursos que te permite empaquetar imágenes, iconos y otros archivos dentro de tu aplicación. Es como las "Bibliotecas" de Adobe Creative Cloud.
¿Qué es un archivo de recursos (.qrc)?
Un archivo .qrc es un archivo XML que lista todos los recursos (imágenes, iconos, etc.) que tu aplicación necesita. Qt los compila dentro de la aplicación para que no necesites distribuir archivos de imagen por separado.
Cómo crear un archivo de recursos
- Ve a Editar > Edit Resources (o haz clic en el icono de recursos en la toolbar)
- Se abrirá el Resource Editor en la parte inferior
- Haz clic en "New Resource File" (icono de documento en blanco)
- Dale un nombre (ej:
recursos.qrc) y guárdalo en tu proyecto - Haz clic en "Add Prefix" y escribe
/iconoso/imagenes - Haz clic en "Add Files" y selecciona tus archivos de imagen/icono
- Ahora puedes usar estos recursos en cualquier widget
📸 [PLACEHOLDER PARA IMAGEN]: Captura de pantalla del Resource Editor mostrando cómo agregar un prefix y archivos.
Estructura de un archivo .qrc
<RCC>
<qresource prefix="/iconos">
<file>iconos/guardar.png</file>
<file>iconos/eliminar.png</file>
<file>iconos/configuracion.svg</file>
</qresource>
<qresource prefix="/imagenes">
<file>imagenes/logo.png</file>
<file>imagenes/fondo.jpg</file>
</qresource>
</RCC>
Cómo usar los recursos
Una vez agregados, los recursos se referencian con la sintaxis :/prefix/archivo:
| Contexto | Sintaxis | Ejemplo |
|---|---|---|
| ---------- | ---------- | --------- |
| Property Editor (pixmap, icon) | "Choose Resource..." → seleccionar | `:/iconos/guardar.png` |
| Style Sheet (background-image) | `url(:/prefix/archivo)` | `url(:/imagenes/fondo.png)` |
| Código Python | `":/iconos/guardar.png"` | `QIcon(":/iconos/guardar.png")` |
💡 CONSEJO: Organiza tus recursos con prefixes como
/iconos,/imagenes,/fondos. Es como organizar tus archivos en carpetas dentro de tu proyecto de diseño.
---
8.2 Formatos de Imagen Recomendados
| Formato | Cuándo usarlo | Ventajas | Desventajas |
|---|---|---|---|
| --------- | --------------- | ---------- | ------------- |
| **PNG** | Iconos, logos, imágenes con transparencia | Sin pérdida, soporta transparencia | Archivos más grandes |
| **SVG** | Iconos, logos, gráficos vectoriales | Escala infinita sin perder calidad | No apto para fotos |
| **JPG/JPEG** | Fotografías, imágenes complejas | Archivos pequeños | Con pérdida, sin transparencia |
| **ICO** | Iconos de ventana (.ico) | Múltiples tamaños en un archivo | Solo para iconos de ventana |
| **GIF** | Animaciones simples | Soporta animación | Máximo 256 colores |
| **WebP** | Imágenes optimizadas para web | Mejor compresión que JPG/PNG | Soporte limitado en Qt antiguo |
Regla de oro
| Tipo de recurso | Formato recomendado | Tamaño sugerido |
|---|---|---|
| ----------------- | --------------------- | ----------------- |
| **Iconos de botones** | SVG o PNG | 24x24, 32x32, 48x48 |
| **Logo de la aplicación** | SVG o PNG | 256x256 o vectorial |
| **Fotos** | JPG | Según necesidad |
| **Fondos/patrones** | PNG o JPG | Según necesidad |
| **Icono de ventana** | ICO o PNG | 16x16, 32x32, 48x48, 256x256 |
💡 CONSEJO: Para iconos, prefiere formato SVG porque escala a cualquier tamaño sin perder calidad. Un icono SVG de 24x24 se verá perfecto tanto en un botón pequeño como en uno grande.
---
8.3 Usar Imágenes en Labels
Un Label puede mostrar imágenes usando su propiedad pixmap.
Paso a paso
- Selecciona un Label
- En el Property Editor, busca la propiedad pixmap
- Haz clic en el botón
...y selecciona "Choose Resource..." - Selecciona la imagen de tu archivo de recursos
- Ajusta la propiedad scaledContents a
truepara que la imagen se ajuste al tamaño del Label
Propiedades importantes para imágenes en Labels
| Propiedad | Descripción | Recomendación |
|---|---|---|
| ----------- | ------------- | --------------- |
| **pixmap** | La imagen que muestra | Selecciona desde recursos |
| **scaledContents** | Si la imagen se escala al tamaño del Label | `true` para ajustar |
| **alignment** | Alineación de la imagen | `AlignCenter` para centrar |
| **margin** | Margen interno | `0` para sin margen |
| **sizePolicy** | Cómo se comporta al redimensionar | `Preferred` o `Expanding` |
Label circular (avatar/foto de perfil)
Para crear un Label circular (como una foto de perfil):
QLabel#foto_perfil {
border-radius: 60px; /* mitad del ancho/alto */
border: 3px solid #41CD52;
}
💡 CONSEJO: Para que el border-radius funcione como círculo, el Label debe ser cuadrado y el radio debe ser la mitad del ancho. Ejemplo: Label de 120x120 con border-radius: 60px.
---
8.4 Iconos en Botones
Los botones pueden tener iconos además de texto. Esto hace tu interfaz más profesional e intuitiva.
Push Button con icono
- Selecciona un Push Button
- Busca la propiedad icon en el Property Editor
- Haz clic en
...y selecciona "Choose Resource..." - Selecciona tu icono
- Ajusta iconSize para controlar el tamaño del icono (ej:
24, 24)
Tool Button
El Tool Button está diseñado específicamente para iconos:
| Propiedad | Descripción | Valores |
|---|---|---|
| ----------- | ------------- | --------- |
| **icon** | Icono principal | Selecciona desde recursos |
| **text** | Texto opcional | "Guardar" |
| **toolButtonStyle** | Cómo mostrar icono y texto | `IconOnly`, `TextOnly`, `TextBesideIcon`, `TextUnderIcon` |
| **autoRaise** | Se eleva solo al pasar el mouse | `true` para toolbars |
| **iconSize** | Tamaño del icono | `24, 24`, `32, 32` |
Dónde conseguir iconos gratuitos
| Fuente | Descripción | Enlace |
|---|---|---|
| -------- | ------------- | -------- |
| **Material Icons** (Google) | Iconos de Material Design, gratuitos | [fonts.google.com/icons](https://fonts.google.com/icons) |
| **Feather Icons** | Iconos SVG limpios y minimalistas | [feathericons.com](https://feathericons.com) |
| **Heroicons** | Iconos de los creadores de Tailwind CSS | [heroicons.com](https://heroicons.com) |
| **Flaticon** | Millones de iconos gratuitos y premium | [flaticon.com](https://www.flaticon.com) |
| **Icons8** | Iconos en múltiples estilos | [icons8.com](https://icons8.com) |
| **Remix Icon** | Iconos de código abierto | [remixicon.com](https://remixicon.com) |
---
8.5 Icono de la Ventana
Para agregar un icono a la barra de título de tu ventana:
- Selecciona el Dialog o MainWindow
- En el Property Editor, busca windowIcon
- Haz clic en
...y selecciona "Choose Resource..." - Selecciona tu icono (preferiblemente .ico o PNG de 256x256)
---
8.6 Imágenes de Fondo y Bordes con Style Sheets
Imagen de fondo
/* Imagen de fondo que se repite (tile) */
QWidget {
background-image: url(:/imagenes/fondo.png);
}
/* Imagen de fondo que no se repite */
QWidget {
background-image: url(:/imagenes/header.png);
background-repeat: no-repeat;
background-position: top center;
}
/* Imagen de fondo que cubre todo el widget */
QWidget {
background-image: url(:/imagenes/fondo.jpg);
background-repeat: no-repeat;
background-position: center;
background-size: cover; /* Nota: background-size puede no funcionar en todas las versiones de Qt */
}
Borde con imagen
QFrame {
border-image: url(:/imagenes/borde.png) 10 10 10 10 stretch stretch;
}
Label con imagen de fondo
QLabel#banner {
background-image: url(:/imagenes/banner.png);
background-repeat: no-repeat;
background-position: center;
min-height: 150px;
}
---
8.7 Organizar Recursos en el Proyecto
Una buena estructura de carpetas para tus recursos:
mi_proyecto/
├── mi_app.ui
├── recursos.qrc
├── recursos/
│ ├── iconos/
│ │ ├── guardar.svg
│ │ ├── eliminar.svg
│ │ ├── configurar.svg
│ │ ├── usuario.svg
│ │ └── logo.png
│ ├── imagenes/
│ │ ├── banner.png
│ │ ├── fondo.jpg
│ │ └── avatar.png
│ └── fuentes/
│ └── MiFuente.ttf
💡 CONSEJO: Mantén todos tus recursos en una carpeta
recursos/organizada por tipo. Esto facilita la gestión y hace que el archivo .qrc sea más fácil de mantener.
---
8.8 Recursos Embebidos vs. Externos
Recursos embebidos (recomendado)
Los recursos se incluyen en el archivo .qrc y se compilan dentro de la aplicación.
Ventajas:
- No necesitas distribuir archivos de imagen por separado
- Los recursos siempre están disponibles
- Mejor rendimiento
Desventajas:
- La aplicación es más grande
- Cambiar una imagen requiere recompilar
Referencias externas (rutas absolutas)
Los recursos se referencian por ruta de archivo.
QLabel {
background-image: url(C:/imagenes/fondo.png);
}
Ventajas:
- Puedes cambiar imágenes sin recompilar
- La aplicación es más pequeña
Desventajas:
- Debes distribuir las imágenes por separado
- Las rutas pueden romperse en otros sistemas
💡 CONSEJO: Siempre usa recursos embebidos (.qrc) para iconos y elementos de la interfaz. Usa referencias externas solo para imágenes que el usuario pueda cambiar (como un fondo personalizado).
---
Ejercicio Práctico del Módulo
🏋️ EJERCICIO 8: Tarjeta de Perfil con Foto e Iconos
>
Objetivo: Crear una tarjeta de perfil profesional con foto e iconos.
>
Pasos:
1. Descarga 4 iconos SVG gratuitos (usuario, email, teléfono, web) de [Feather Icons](https://feathericons.com) o [Heroicons](https://heroicons.com)
2. Descarga una imagen para usar como foto de perfil (puede ser cualquier imagen)
3. Crea un archivo de recursos (
recursos.qrc)4. Agrega un prefix
/iconosy agrega los 4 iconos SVG5. Agrega un prefix
/imagenesy agrega la foto de perfil6. Crea un Dialog de 350x450 píxeles con fondo oscuro (
#1a1a2e)7. Agrega un Frame como contenedor de la tarjeta:
-
styleSheet: background-color: #2d2d3d; border-radius: 16px;- minimumSize: 310x410
- Aplica un Layout Vertical
8. Agrega un Label para la foto de perfil:
- pixmap: selecciona tu imagen desde recursos
- scaledContents:
true- minimumSize:
120, 120- maximumSize:
120, 120- styleSheet:
border-radius: 60px; border: 3px solid #41CD52;- alignment:
AlignCenter9. Agrega un Label para el nombre:
- text: "Ana García"
- font: 18pt, Bold, blanco
- alignment:
AlignCenter10. Agrega un Label para la profesión:
- text: "Diseñadora UX/UI"
- font: 12pt, color verde (#41CD52)
- alignment:
AlignCenter11. Agrega un Label para la bio:
- text: "Apasionada por crear experiencias digitales memorables"
- font: 10pt, color gris (#aaa)
- wordWrap:
true- alignment:
AlignCenter12. Agrega una Horizontal Line como separador
13. Agrega 3 Tool Buttons con iconos (email, teléfono, web):
- iconSize:
24, 24- toolButtonStyle:
IconOnly- styleSheet para cada uno:
`cssQToolButton {
background-color: transparent;
border: none;
padding: 8px;
}
QToolButton:hover {
background-color: #41CD52;
border-radius: 8px;
}
`14. Coloca los 3 Tool Buttons en un Horizontal Layout centrado
15. Renombra todos los widgets
16. Guarda como
tarjeta_perfil.ui17. Presiona
Ctrl+Ry verifica que se vea como una tarjeta de presentación moderna
>
Resultado esperado: Una tarjeta de perfil elegante con foto circular, nombre, profesión, bio y botones de contacto con iconos.
---
Recursos Adicionales
| Recurso | Descripción |
|---|---|
| --------- | ------------- |
| [Qt Resource System](https://doc.qt.io/qt-6/resources.html) | Documentación oficial del sistema de recursos |
| [Material Icons](https://fonts.google.com/icons) | Iconos gratuitos de Google |
| [Feather Icons](https://feathericons.com) | Iconos SVG minimalistas |
| [Heroicons](https://heroicons.com) | Iconos de Tailwind CSS |
| [Remix Icon](https://remixicon.com) | Iconos de código abierto |
| [Flaticon](https://www.flaticon.com) | Millones de iconos |
---
Evaluación de Comprensión
- ¿Qué es un archivo .qrc y para qué sirve?
- ¿Cómo agregas una imagen a un Label?
- ¿Qué propiedad debes activar para que una imagen se ajuste al tamaño del Label?
- ¿Cuál es la sintaxis para referenciar un recurso en un Style Sheet?
- ¿Qué formato de imagen recomiendas para iconos? ¿Por qué?
- ¿Cómo cambias el icono de la ventana (barra de título)?
- ¿Qué propiedad del Tool Button controla cómo se muestran el icono y el texto?
- ¿Cuál es la ventaja de usar recursos embebidos vs. referencias externas?
- ¿Cómo creas un Label circular para una foto de perfil?
- ¿Menciona 3 fuentes de iconos gratuitos?
---
Módulo anterior: ← [Módulo 7: Propiedades Avanzadas](06-propiedades-avanzadas.md)
Siguiente módulo: → [Módulo 9: Menús y Toolbars](08-menu-toolbars.md)
Escribe tus respuestas y luego presiona el botón para comparar con las respuestas correctas.
Ejercicio 8: Tarjeta de Perfil con Foto e Iconos
Módulo 8: Iconos y Recursos
---
Objetivo
Crear una tarjeta de perfil profesional con foto circular e iconos de contacto.
---
Instrucciones
- Descarga 4 iconos SVG gratuitos de [Feather Icons](https://feathericons.com) o [Heroicons](https://heroicons.com) (usuario, email, teléfono, web)
- Descarga una imagen para foto de perfil
- Crea un archivo de recursos (
recursos.qrc):
- Prefix
/iconos→ agrega los 4 iconos SVG - Prefix
/imagenes→ agrega la foto de perfil
- Crea un Dialog de 350x450 píxeles con fondo
#1a1a2e - Frame contenedor:
styleSheet: background-color: #2d2d3d; border-radius: 16px;- minimumSize: 310x410
- Layout Vertical
- Label foto de perfil:
- pixmap: selecciona tu imagen desde recursos
- scaledContents:
true - minimumSize y maximumSize:
120, 120 styleSheet: border-radius: 60px; border: 3px solid #41CD52;- alignment:
AlignCenter
- Label nombre: "Ana García" (18pt, Bold, blanco, centrado)
- Label profesión: "Diseñadora UX/UI" (12pt, #41CD52, centrado)
- Label bio: "Apasionada por crear experiencias digitales memorables" (10pt, #aaa, wordWrap: true, centrado)
- Horizontal Line como separador
- 3 Tool Buttons con iconos (email, teléfono, web):
- iconSize:
24, 24 - toolButtonStyle:
IconOnly - Estilo hover con fondo verde
- Coloca los 3 Tool Buttons en un Horizontal Layout centrado
- Renombra todos los widgets
- Guarda como
tarjeta_perfil_iconos.ui - Presiona
Ctrl+Ry verifica
---
Resultado Esperado
Una tarjeta de perfil elegante con foto circular con borde verde, nombre, profesión, bio y 3 botones de contacto con iconos SVG.
---
Checklist
- [ ] Archivo de recursos creado con iconos e imagen
- [ ] Foto de perfil circular (border-radius: 60px)
- [ ] Borde verde alrededor de la foto
- [ ] Nombre y profesión estilizados
- [ ] Bio con wordWrap
- [ ] 3 Tool Buttons con iconos SVG
- [ ] Efecto hover en los botones
- [ ] Layouts aplicados correctamente