Automatizando acciones gracias al RAII (parte I)

Como mencioné en una entrada anterior, uno de los aspectos que más me gusta de C++ es el RAII (Resource Acquisition Is Initialization). Introducida por Bjarne Stroustrup (creador de C++), esta técnica hace uso de los constructores y destructores para la correcta gestión de recursos. Tiene como bases las siguientes premisas:

  • Un constructor siempre se ejecuta antes de que el objeto pueda ser usado, por lo que es un lugar seguro para reservar, inicializar, preparar los recursos a ser utilizados posteriormente.
  • Los destructores son llamados implícitamente cuando el objeto, bueno, se destruye, y es lo último que hace el objeto antes de liberar su propia memoria. Es el momento adecuado de liberar otros recursos usados.
  • Lo único que está garantizado

Sigue leyendo →

Una forma sencilla, rápida y cuasi-automática de medir tiempos de ejecución en funciones

Una tarea típica del programador es la de saber si una función es eficiente o no, tanto desde el punto de vista algorítmico como de tiempo de ejecución real. Creo necesario matizar que ambos valores son importantes, ya que el primero nos dirá el comportamiento del algoritmo a medida que el conjunto de datos crezca, y el segundo un valor más palpable, cercano a lo que el usuario final percibirá.

Por otro lado, no es necesario partirse el cerebro optimizando nuestro código a diestra y siniestra, ya que la mayoría de las veces el tiempo real de ejecución es bueno para el grueso de nuestro código, y el cuello de botella se encuentra en pequeñas porciones de código: búsquedas …

Sigue leyendo →

Pequeños trucos para los QDialogs

Es habitual que nuestras aplicaciones no se restrinjan a una única ventana, sino que se sucedan diversas ventanas de opciones, mensajes, informes, selección de datos, visualización de resultados, etc.

Una de las grandes decisiones que hay que tomar cuando se diseñan estas ventanas es su modalidad que, en lenguaje llano, dice si se puede seguir usando el resto de la aplicación (no modal) o no (modal) mientras esa ventana esté abierta.

Resulta obvio que una ventana no-modal es mucho más compleja de diseñar que una ventana modal, ya que mientras ésta (la ventana no modal) viva seguramente deba comunicarse continuamente con la aplicación (u otras ventanas no modales) para mantener actualizado el estado de ambas (por ejemplo, imaginemos una ventana …

Sigue leyendo →

Un cuadro de búsqueda simple y en tiempo real

Un caso de uso recurrente en muchas aplicaciones es la de tener un conjunto de entradas, posiblemente visualizadas en una tabla, y tener que realizar una búsqueda sobre dichos datos. Si la búsqueda ha de soportar diversas opciones tales como filtrar por fecha, rangos de valores, escoger tipo de envío, campos en los que se buscará, etc., pues seguramente haya que diseñar una ventana específica que cumpla dichos requerimientos. Pero muchas otras veces bastará con un pequeño cajetín de texto donde el usuario escriba lo que desea y el listado de entradas se actualice acorde (y preferiblemente en caliente, conforme se va escribiendo). ¡Vamos a ello!

El código completo de este ejemplo está disponible en GitHub. Esta vez el …

Sigue leyendo →

Signals y slots en Qt (parte II)

En esta segunda entrega de Signals y Slots, estudiaremos la nueva sintaxis introducida en Qt 5, así como una comparativa respecto a la forma antigua, y cómo resolver los principales problemas que puedan surgir.

Actualización: el código de ejemplo para esta entrada está ya disponible en GitHub (Part_2).

Qt 4

El método clásico descrito en el artículo anterior (el único en Qt 4 y anteriores), tiene básicamente dos desventajas:

  • No es posible hacer comprobaciones en tiempo de compilación (abriendo la puerta a muchos errores sutiles e indetectables errores, tales como escribir mal el nombre del slot). Los errores son sólo mostrados en tiempo de ejecución, por consola, y sin ningún tipo de assert ni nada parecido, por

Sigue leyendo →

Signals y slots en Qt (parte I)

Es normal que, para muchos, al hablar de Qt vengan a la cabeza dos palabras: signals y slots. Y es que Qt usa ampliamente este mecanismo de comunicación, muy similar al patrón observador, especialmente en lo referente a interfaces gráficas.

La documentación de Qt es muy extensa en el uso de este mecanismo, pero me ha parecido interesante resaltar algunos aspectos básicos y otros un poco menos obvios. Por su extensión, dividiré este artículo en dos entregas. En esta primera parte introduciré el uso más común y tradicional (el usado hasta Qt 4, aunque sea dentro del contexto de Qt 5), y en la segunda entrega pasaré a explicar las novedades introducidas en Qt 5, una comparativa …

Sigue leyendo →