Correspondencia de monitores entre Qt y Windows

Hace poco modifiqué el módulo de splash screens (en Qt) para mostrar la imagen en el mismo monitor en el que se mostraría la aplicación. Esto implica conocer en qué monitor se va a mostrar la aplicación, calcular el tamaño del escritorio, escalar la imagen, entre otras.

Qt ofrece una forma muy amigable de solicitar información sobre las pantallas disponibles mediante QApplication::screens(), la cual devuelve una lista de QScreens desde donde podemos consultar datos como la resolución y el factor de escala, por lo que los requisitos de dimensionado estaban cubiertos: sólo quedaba por conocer el monitor en el que se iba a mostrar la aplicación.

Nótese que este módulo se usa tanto en aplicaciones creadas en Qt como …

Sigue leyendo →

Cómo montar una carpeta local como unidad en Windows

Llevo un par de años trabajando a distancia y, aunque no pretendo abrir un especial de teletrabajo, me gustaría compartir un pequeño cambio que hice en mi sistema para ajustarme mejor a esa situación y poder agilizar mi día a día. No es ningún secreto pero igual ayuda a los que hayáis tenido que cambiar al remote working.

Nuestro flujo de compilación incluye trabajar continuamente con repositorios (en donde se ven los beneficios de usar un sistema de control de versiones distribuido como Git), y descargar datos desde unidades de red, las cuales tenemos montadas como discos. Además, nuestro día a día incluye consultar continuamente ficheros en dichas unidades. Todos estos accesos pueden llegar a ser bastante más lentos …

Sigue leyendo →

[Nano-post] Qt, moc y cabeceras precompiladas

Si vuestro proyecto Qt presenta las siguientes características (todas):

  • usa cabeceras precompiladas,
  • se compila en Visual Studio,
  • y usa compilación basada en Qt / MSBuild

podéis encontraros con que los ficheros generados por la herramienta de moc’ing de Qt no compilan correctamente al no encontrar el fichero stdafx.h (o pch.h, o cualquiera sea el nombre de vuestro fichero de cabeceras precompiladas).

Recordad que estos ficheros _ moc’eados_ los genera Qt para ficheros (normalmente) .h que incluyen una clase con la macro Q_OBJECT, así se genera el fichero moc_Header.cpp para el fichero Header.h.

Es posible solucionar este problema fácilmente entrando en la configuración de los ficheros de cabecera y forzar la inclusión del fichero de cabecera precompilado:

Sigue leyendo →

Convirtiendo cadenas a booleanos de forma expresiva

Al almacenar y recuperar valores desde un JSON, XML o cualquier otra notación de datos, es frecuente encontrarnos con la necesidad de convertir booleanos a cadenas y viceversa. En términos generales no es una operación complicada, y seguramente nos hagamos un par de funciones de ayuda similares a la siguientes:

Ahora, supongamos que, para facilitar la lectura del fichero y para ser más expresivos en su contenido, en lugar de "true" y "false", elegimos "yes" / "no" para unos casos, "show" / "hide" para otros, "enabled" / "disabled" en unos cuantos, etc. Nuestras funciones se complican un poco:

La interfaz del nuevo string2bool obvia el false_str por simplicidad: si no es el true_str pues será el false_str, ¿no? …

Sigue leyendo →

Poniendo el foco en… el foco

Hoy hablaremos de tres casos particulares en los que es conveniente alterar el comportamiento por defecto que tienen algunos controles de Qt al recibir el foco.

Breve introducción

Para los que no sepan qué es el foco, básicamente éste indica qué control va a recibir los eventos de entrada más importantes (como los de teclado), y se suele representar con un pequeño realce del color de los bordes o algún tipo de contorno. El foco puede obtenerse normalmente clicando sobre el control o pulsando repetidamente la tecla tabulador, aunque esto depende (en jerga Qt) de la política de foco (focus policy) que tenga el control.

Seleccionar todo el texto al mostrar el formulario

El más sencillo de los …

Sigue leyendo →

Navegando rápidamente por el código (parte I)

Como dicen muchos autores, escribir código no es lo único que hace un programador, un programador lee mucho código. Además, la mayor parte de ese código (casi la totalidad) no la hemos escrito nosotros. No, ni siquiera en esos proyectos en los que somos el único desarrollador. ¿Cuántos os acordáis de todo el código, con sus más íntimos recovecos, explicaciones y casos borde, que habéis escrito en los últimos… 6 meses? ¿4 semanas? ¿5 días? ¿el viernes? Lo normal es solucionar problemas, refactorizar código, hacerlo mejor, agregar nuevas funcionalidades, documentarlas… y lo normal es no acordarnos de todo. No digo olvidarlo todo, pero sí que es normal que nos olvidemos de cosas, del nombre exacto de una función o clase, …

Sigue leyendo →