Qt + resources + fonts + stylesheets

A partir de esta entrega cambiaré el título de las anec-notas para reflejar mejor la temática y ahorrar espacio en la cabecera de la entrada: muchas veces estará en inglés (por eso de ser el idioma universal de la programación), quitaré el “anec-notas” del mismo y dejaré la indicación únicamente en la categoría del post.

Terminado este preámbulo, esta entrega mostrará una forma de incluir fuentes propias en un proyecto Qt, al menos la que más me gusta. Lo primero será ubicar el fichero de fuentes. Personalmente recomiendo utilizar un fichero de recursos (QRC) en el cual embeber la fuente:

<RCC>
 <qresource>
 <file>fuentes/mipropiafuente.ttf</file>
 </qresource>
</RCC>

Esta fuente deberá estar ubicada en “./fuentes/” respecto al fichero de recursos.

Antes de poder utilizar una fuente, hay que añadirla a la base de datos de fuentes de la aplicación. Para ello se usa la siguiente llamada:

QFontDatabase::addApplicationFont(":/fuentes/mipropiafuente.ttf");

A partir de este momento la fuente estará disponible en toda la aplicación. Bastará con especificarla en una hoja de estilos:

QWidget
{
 font-family: "Nombre real de nuestra fuente";
 font-size: 14px;
 color: #999999;
}

O directamente desde código:

// "pt" es un "QPainter *", seguramente un argumento del evento paint(...)

QFont fold(pt->font());
QFont fnew(fold);

fnew.setFamily("Nombre real de nuestra fuente");
fnew.setWeight(QFont::Bold);
pt->setFont(fnew);

// Escribir texto

pt->setFont(fold); // restablecer la fuente

Sugerencias finales sobre los stylesheets

Para agilizar la personalización de la interfaz sugiero cargar el fichero de estilos por fuera del fichero de recursos durante la etapa de desarrollo, y únicamente cargarlo desde el QRC cuando se pase a producción.

Además, si se están cambiando ficheros ya incluidos en el QRC, tales como imágenes, habrá que saber que los recursos de Qt sólo se re-compilan cuando el fichero .qrc es modificado, no cuando los ficheros incluidos lo hacen. Una buena técnica para automatizar este proceso es “tocar” el fichero QRC antes de cada compilación, al menos durante las pruebas de diseño de interfaz (la compilación de un QRC puede tomar su tiempo si los recursos incluidos son grandes). Para ello sugiero ver la entrada anterior sobre el comando touch en VisualStudio.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.