KDDockWidgets, uma estrutura de implementação avançada para QDockWidget

KDQDockWidgetName

O KDAB Group é uma consultoria de software para aplicações Qt, C++ e OpenGL para diferentes plataformas (desktop, embarcadas e móveis), além de oferecer tutoria para o desenvolvimento de aplicações Qt do zero e na migração de todos os frameworks populares para Qt.

Ao longo dos anos, a KDAB contribuiu e financiou o desenvolvimento do QDockWidget . No entanto, como as alterações e correções de bugs levavam muitos dias para serem implementadas, o uso do QDockWidget provou ser uma escolha inadequada, o que levou à criação do KDDockWidgets.

KDDockWidgets é um framework de encaixe avançado para QDockWidgets , que expande seu uso adicionando recursos não suportados pelo QDockWidgets.

O QdockWidget combina nativamente código de interface gráfica com lógica de estado, o que torna muito difícil adicionar novos recursos e causa uma complexidade de implementação significativa em diferentes plataformas. Como componente central de diversas interfaces gráficas de usuário, ele permite mover elementos inteiros da janela (barras de ferramentas, grupos de widgets etc.) para onde você quiser.

No entanto, a KDAB argumentou que a manutenção do código do QDockWidgets não é muito fácil, afirmando que:

O KDDockWidgets nasceu da minha necessidade de preservar minha sanidade depois de ter trabalhado em dois projetos que exigiam ampla personalização. Um em que tentamos trabalhar diretamente a montante, mas a taxa de regressão acabou sendo muito grande.

E outro em que tomei o caminho de usar APIs privadas, eventos de mouse falsos e filtros de eventos, o que parecia uma boa ideia no início, mas acabou sendo um mundo de dor. Além disso, nossos clientes estavam ficando mais criativos com seus pedidos, então estava claro que precisávamos de uma estrutura de encaixe melhor.

O principal problema reside em seu design , que é bastante monolítico, porém configurável (podemos escolher as funções disponíveis para o usuário, mesmo que poucas pessoas as utilizem, para animações), com código espaguete (misturando alegremente lógica e estado dos componentes). Portanto, qualquer alteração pode gerar um grande número de regressões.

Por isso, a KDAB decidiu criar o KDDockWidgets , que visa simplificar bastante o design do QDockWidgets, além de facilitar sua adaptação a situações específicas.

KDDockWidgets fornece as seguintes funções:

  • Ser capaz de encaixar widgets em uma janela flutuante e encaixar esse grupo na janela principal
  • Encaixe em qualquer janela, não apenas na janela principal
  • Encaixando no centro da janela principal
  • Suporte para guias destacáveis ​​no widget central dentro da janela principal
  • Ser capaz de separar guias de uma barra de guias em uma área de encaixe
  • Capacidade de combinar várias guias combinando vários componentes.
  • Exponha widgets de ajuda internos para que o usuário possa personalizá-los ou fornecer os seus próprios.
  • Os grupos de componentes podem alternar livremente de uma janela externa (que contém apenas este grupo de componentes) para a janela principal (um recurso parcialmente implementado no Qt 5.10).
  • Personalize widgets de guia
  • Personalize as barras de título
  • Personalizar molduras de janela
  • Além de destacar que a principal mudança é a adição de indicadores precisos para remover elementos da GUI, além do fato de que a noção de widget central desaparece, já que como tal não é mais um elemento específico.

A nova organização separa claramente a lógica da interface gráfica , permitindo que o mecanismo de execução subjacente seja facilmente reutilizado para interfaces Qt Quick (o que é o esperado). Ela também facilita a personalização da interface; os usuários podem fornecer seus próprios widgets para qualquer parte da interface.

Além disso, o KDDockWidgets foi concebido como um framework, permitindo que você sobrescreva facilmente as interfaces para fornecer comportamento e aparência personalizados. O KDDockWidgets é um framework de código aberto, licenciado sob as licenças GPLv2 e GPLv3.

O código do KDDockWidgets, bem como uma demonstração do mesmo, estão disponíveis no seguinte link.


Adicionar como fonte preferencial no Google