KDDockWidgets, un framework de implementación avanzado para QDockWidget
El Grupo KDAB es una consultora de software para aplicaciones Qt, C ++ y OpenGL para las diferentes plataformas (escritorio, integradas y móviles), además de ello proporciona tutoría para desarrollar aplicaciones Qt desde cero y en la transferencia de todos los marcos populares a Qt.
A lo largo de los años, KDAB ha contribuido y financiado el desarrollo de QDockWidget. Pero debido a que los cambios y soluciones a errores tardaban muchos días en implementarse, el uso de QdockWidget, resulto no ser una buena opción, dando así el nacimiento de KDDockWidgets.
KDDockWidgets es un framework avanzado de acoplamiento para QDockWidgets, con el cual expande el uso de este añadiendo funciones que no admite QDockWidgets.
QdockWidget de manera nativa combina el código GUI con la lógica con el estado, lo que hace que sea muy difícil avanzar con nuevas características, lo cual causa una gran complejidad en su implementación dentro de las diferentes plataformas. Dado que es un componente básico de una serie de interfaces gráficas de usuario, con el se pueden mover elementos completos de la ventana (barras de herramientas, grupos de widgets, etc.) donde lo desee.
Sin embargo, KDAB argumentaba que el mantenimiento del código de QDockWidgets no es muy fácil, pues comenta que:
KDDockWidgets nació de mi necesidad de preservar la cordura después de haber trabajado en dos proyectos que necesitaban una amplia personalización. Uno en el que intentamos trabajar directamente aguas arriba pero la tasa de regresión terminó siendo demasiado.
Y otro en el que tomé la ruta de usar API privada, eventos de mouse falsos y filtros de eventos , que al principio parecían una buena idea, pero terminaron siendo un mundo de dolor. Además, nuestros clientes se estaban volviendo más creativos con sus solicitudes, por lo que estaba claro que necesitábamos un mejor marco de acoplamiento.
El problema principal es su diseño, bastante monolítico pero configurable (podemos elegir las funciones disponibles para el usuario, incluso si pocas personas lo hacen, para las animaciones), con un código de espagueti (mezclando alegremente la lógica y el estado componente). Por lo tanto, cualquier cambio puede crear una gran cantidad de regresiones.
Es por ello que KDAB ha decidido crear KDDockWidgets, con el cual busca simplificar enormemente el diseño QDockWidgets, al tiempo que facilita su adaptación a situaciones particulares.
KDDockWidgets proporciona las siguientes funciones:
- Poder acoplar widgets en una ventana flotante y acoplando ese grupo a la ventana principal
- Acoplamiento a cualquier ventana, no solo a la ventana principal
- Acoplamiento al centro de la ventana principal
- Soporte para pestañas desmontables en el widget central dentro de la ventana principal
- Poder separar pestañas de una barra de pestañas en un área de acoplamiento
- Capacidad de poder combinar varas pestañas combinando varios componentes.
- Exponer widgets de ayuda interna para que el usuario pueda personalizarlos o proporcionar los suyos propios.
- Los grupos de componentes pueden cambiar libremente de una ventana externa (que solo contiene este grupo de componentes) a la ventana principal (una característica parcialmente implementada en Qt 5.10).
- Personalizar widgets de pestañas
- Personalizar barras de título
- Personalizar marcos de ventanas
- Además de que se destaca que el cambio principal es la adición de indicadores precisos para eliminar elementos de la GUI, además de que la noción de widget central desaparece, pues como tal ya no es un elemento específico.
La nueva organización separa claramente la lógica de la interfaz gráfica, de modo que el motor de ejecución subyacente se puede reutilizar fácilmente para las interfaces Qt Quick (que en última instancia se espera). También facilita la personalización de la interfaz, el usuario puede proporcionar sus propios widgets para cualquier parte de la interfaz.
Además, KDDockWidgets pretende ser un marco, por lo que puede anular fácilmente las interfaces para proporcionar un comportamiento y apariencia personalizados. KDDockWidgets es un framework de código abierto, que se encuentra bajo las licencias GPLv2 y GPLv3.
El código de KDDockWidgets así como un demo de este, están disponibles en el siguiente enlace.