La empresa Qt Company ha publicado la versión del marco Qt 6.11, en la que se ha continuado el trabajo para estabilizar y aumentar la funcionalidad de la rama Qt 6. Qt 6.11 proporciona soporte para las plataformas Windows 10+, macOS 13+, Linux (Ubuntu 22.04/24.04, openSUSE 15.6/16, SUSE 15 SP6, RHEL 8.10/9.6/10, Debian 11.6/12), iOS 17+, Android 9+(API 23+), webOS, WebAssembly, INTEGRITY, VxWorks, FreeRTOS y QNX. El código fuente de los componentes de Qt se proporciona bajo licencias LGPLv3 y GPLv2. Qt 6.11 ha obtenido el estatus de lanzamiento intermedio, cuyo soporte público estará disponible durante 6 meses (+ otros 6 meses para usuarios comerciales).
Principales cambios en Qt 6.11:
- Se ha añadido el módulo Qt Canvas Painter, que proporciona una API para la renderización acelerada por hardware de contenido 2D, construido con referencia a la especificación HTML Canvas 2D Context. Para la renderización se utiliza el motor RHI (Interfaz de Hardware de Renderización), que soporta varias API 3D (OpenGL, Vulkan, Metal y Direct 3D), lo que ha permitido lograr un aumento significativo en el rendimiento. En las pruebas realizadas, Qt Canvas Painter resultó ser dos veces más rápido que QPainter con el backend de OpenGL en una típica laptop Lenovo ThinkPad P16 Gen 2, cinco veces más rápido en una tablet Android económica Lenovo Tab M10 HD y diez veces más rápido en la tablet Android de alta gama Samsung Galaxy Tab S8.

Además de un alto rendimiento, Qt Canvas Painter implementa el soporte para características avanzadas como antialiasing personalizable, gradientes de contorno y sombras (QCanvasBoxGradient y QCanvasBoxShadow similares a la propiedad CSS box-shadow), patrones de cuadrícula (QCanvasGridPattern), pinceles de shader personalizados y efectos de color para modificar la transparencia, el brillo, el contraste y la saturación.

- La funcionalidad del módulo Qt Quick 3D se asemeja a las capacidades de los motores de juegos. Se ha añadido soporte para la técnica de renderizado SSGI (Iluminación Global en Espacio de Pantalla) para simular el reflejo de la luz en las superficies en la etapa de posprocesamiento (una alternativa al horneado de mapas de luz) y SSR (Reflejos en Espacio de Pantalla) para un renderizado realista de reflejos en tiempo real. El algoritmo de suavizado de objetos en movimiento se ha mejorado gracias a la generación de vectores de movimiento para cada objeto. Se han implementado pasadas de renderizado personalizables que se pueden utilizar directamente desde QML para máscaras de capas, efectos de posprocesamiento y definición de objetos por color. Se han añadido nuevas interfaces de programación para capas y etiquetas que permiten controlar pasadas de renderizado individuales, activar elementos en diferentes etapas de la tubería de renderizado y redirigir a los búferes de renderizado objetivo.

- Se han ampliado las capacidades del módulo Qt Graphs. Se ha añadido el tipo CustomSeries, que permite crear gráficos personalizados en los que un delegado designado por el usuario es responsable del renderizado de cada elemento de datos. En gráficos 3D, se ha implementado soporte para múltiples instancias de ejes; por ejemplo, en QBar3DSeries se pueden usar ejes individuales para rowAxis, valueAxis y columnAxis, mientras que en QScatter3DSeries y QSurface3DSeries se pueden utilizar ejes separados para axisX, axisY y axisZ. Se han añadido nuevas propiedades para sobrescribir colores para ejes individuales, configurar gradientes en los gráficos, cambiar el estilo de las líneas y posicionar etiquetas. Se ha añadido un ejemplo de creación de gráficos 2D y 3D personalizables: Wind Turbine Dashboard.

- Se ha añadido un módulo experimental Qt TaskTree, que proporciona un enfoque declarativo para la creación y ejecución de tareas asíncronas en C++. Los componentes clave de Qt TaskTree son: "recetas" - objetos reutilizables que describen un flujo de trabajo asíncrono; "grupos" - que definen políticas para tareas secundarias; "almacenamiento" para compartir datos entre tareas; "iteradores" para ciclos y reejecución de tareas. Qt TaskTree también resuelve el problema de la incompatibilidad entre API, unificando diversas API asíncronas en una interfaz tipificada.

- Se han ampliado las capacidades para trabajar con gráficos vectoriales animados, generados a partir de imágenes en formatos SVG y Lottie. Se han estabilizado el módulo Qt Quick VectorImage y la herramienta lottietoqml. Se ha añadido soporte para animación de morphing, máscaras SVG, símbolos SVG y capas de máscara (matte layer, para gestionar la visibilidad de otra capa).
- Se ha añadido el componente DoubleSpinBox en Qt Quick Controls. En DialogButtonBox se ha implementado la posibilidad de gestionar el procesamiento de botones por defecto. En el efecto RectangularShadow se ha incorporado el control independiente de los radios de los ángulos.
- En Qt Widgets se ha añadido la opción StretchBanner en QWizard; en QAbstractItemView se ha implementado el parámetro keyboardSearchFlags para ajustar el comportamiento de búsqueda al pulsar teclas; en QColumnView se ha añadido una propiedad para gestionar la visibilidad de la vista previa.
- Se ha añadido el módulo Qt OpenAPI, que permite generar código de cliente HTTP utilizando la API RESTful de Qt Networks, basado en la especificación OpenAPI en formato YAML.
- Se ha añadido un mecanismo en el módulo Qt GRPC para gestionar el flujo y contenido de las solicitudes y respuestas.
- En el módulo Qt HTTP Server se han ampliado las herramientas de gestión de límites y se ha mejorado el manejo de respuestas en el hilo de trabajo. En QNetworkRequest se ha añadido la posibilidad de ajustar los parámetros TCP Keep Alive (las conexiones inactivas se cierran automáticamente después de 2 minutos por defecto).
- En el QML Language Server, utilizado para la integración con IDE, se ha añadido información sobre la ubicación de la definición de tipo QML en el código C++ para facilitar la navegación entre QML y C++ desde el IDE; al trabajar con código C++, se pueden encontrar objetos QML por sus identificadores y navegar fácilmente por la jerarquía de contextos QML.
- Además de QRangeModel, se ha implementado la clase QRangeModelAdapter, que proporciona una API C++ para modificar datos de modelos, interactuando a través del protocolo QAbstractItemModel, lo cual simplifica la transferencia de datos desde el código del backend en C++ a Qt Quick o Qt Widget.
- Se ha añadido soporte para la plataforma Android 16. Se ha implementado la funcionalidad Google Play Feature Delivery para dividir la aplicación en paquetes (el paquete principal se instala desde Google Play inmediatamente, mientras que los paquetes adicionales se cargan según sea necesario). Para Android Automotive se ha implementado soporte para iniciar Qt sin dependencias de Android para un arranque rápido del renderizado.
Además, se puede destacar el lanzamiento reciente del entorno de desarrollo integrado Qt Creator 19, diseñado para crear aplicaciones multiplataforma utilizando la biblioteca Qt. Se admite tanto el desarrollo de programas clásicos en C++ como el uso del lenguaje QML, en el que para definir scripts se utiliza JavaScript, y la estructura y parámetros de los elementos de la interfaz se establecen mediante bloques similares a CSS. Las compilaciones listas están disponibles para Linux, Windows y macOS.
Entre las novedades destaca el modo minimap (Preferencias > Editor de texto > Visualización > Habilitar minimapa), que muestra junto a la barra de desplazamiento una miniatura de todo el contenido, permitiendo una visión general de todo el código. Se incluye un simple servidor MCP para la integración con asistentes de IA, permitiendo abrir archivos y proyectos, ejecutar compilaciones y realizar depuraciones. La configuración de compilaciones en dispositivos externos se ha simplificado, añadiendo un botón de Detección automática para identificar automáticamente la versión de Qt, el compilador, el depurador y CMake tras registrar el dispositivo. Se ha implementado el acceso directo a los sistemas de archivos de los dispositivos conectados, dispositivos Android y emuladores.

Fuente: opennet.ru





