- Resumo da pesquisa e comparação de bibliotecas para criar GUI em C++
- Requisitos básicos: suporte apenas ao Windows, uso comercial permitido, modo escuro incluído com estilização fácil, geração de um único EXE com menos de 40 MB e mínimas dependências, desenvolvimento rápido
WinUI 3
- No começo, pareceu uma excelente escolha
- Permite usar componentes modernos do Windows e personalizar as cores do estilo
- É possível projetar usando XAML e até usar diretamente o designer do Visual Studio
- Problemas:
- O suporte para distribuir o app sem empacotamento não é muito bom
- Ao mover o app para uma VM ou outro computador, na maioria das vezes ele não executa
- É preciso distribuir muitos arquivos
.dll para lidar com os recursos do WinUI
- Não é possível criar um único arquivo
.exe portátil
- Em formato empacotado não há problema, mas ele é instalado como pacote AppX, o que causa problemas de acesso à API Win32
Win32 / MFC / pequenas bibliotecas que encapsulam Win32
- Como é necessário alto grau de portabilidade, faz sentido usar a renderização nativa do sistema operacional
- O programa pode ser um único arquivo
.exe e também pode ser bem pequeno (com linkagem estática do MFC)
- Também é possível usar bibliotecas mais minimalistas que alguém já tenha criado
- Problemas:
- Estilizar os controles padrão do Win32 é muito difícil
- É preciso escrever pintura personalizada para todos os controles
- Existe um modo escuro "oculto" usado pelo Explorador de Arquivos do Windows, mas ele cobre apenas alguns controles e ainda assim não fica bom
Qt
- O santo graal das GUIs em C++
- É complexo, mas pode ser estilizado facilmente com Qt Style Sheets
- Problemas:
- Ao fazer linkagem dinâmica, há inúmeras
.dll necessárias para rodar o app, e o tamanho passa de 40 MB
- É possível fazer linkagem estática do Qt no programa, mas aí é preciso tornar o código open source ou distribuir arquivos-objeto para recompilação por causa da licença LGPL do Qt
- Ou então comprar a licença comercial, que custa milhares de dólares
wxWidgets
- Biblioteca fácil de aprender
- É possível usar o wxFormBuilder
- Tem uma licença mais permissiva que a do Qt e pode ser vinculada estaticamente em um executável de 3 MB
- Problemas:
- No Windows, usa componentes nativos do Win32 e não oferece opções de estilização
- Suporta aplicar os controles escuros do Explorador de Arquivos do Windows, mas o resultado não é muito bom
hikogui
- Nova biblioteca GUI em retained mode usando Vulkan como backend
- Tem modo escuro embutido e é fácil de estilizar
- Problemas:
- É preciso um doutorado em ciência da computação para compilar com sucesso
- Depois de tentar compilar os exemplos por mais de 30 minutos, o único resultado foi um executável que travava imediatamente com violação de acesso dentro da biblioteca Vulkan
Sciter
- Boa alternativa ao Electron para escrever GUIs de apps desktop usando HTML/CSS
- Problemas:
- O tamanho final do app, cerca de 25 MB com todas as
.dll, parece ser um problema, mas é aceitável
- Seria melhor se fosse open source e permitisse usar uma versão de linkagem estática para uso comercial
- Não é tão caro quanto o Qt ($310), então pagar por isso seria aceitável
- O problema é que a renderização não é tão boa
- Houve problemas de aliasing em fontes e imagens
- A janela tem uma moldura cinza relativamente grossa (2–3 px) que não pode ser personalizada nem modificada
WinForms / WPF
- Quando se pergunta sobre bibliotecas GUI em C++, a maioria recomenda usar outra stack
- Dizem que C++ é uma má ideia, então o frontend do programa deveria ser feito em outra stack e os recursos escritos em C++ carregados como componentes/módulos
- É possível ter um único
.exe pequeno e usar WinForms/WPF
- Basta embutir as
.dll como recursos no app e extraí-las para uma pasta temporária, depois usar P/Invoke e chamar as .dll compiladas de dentro do app C#/.NET, ou usar C++/CLI
- Problemas:
- O .NET Framework vem pré-instalado no Windows 10 ou superior, então tecnicamente atende ao critério de não ter dependências
-
- Ao embutir as
.dll, elas precisam ser extraídas para algum lugar, e é necessário escrever código extra para que o P/Invoke funcione
-
- O C++/CLI é compilado para código IL do .NET, então o código C++ traduzido para C# fica aparente
Solução?
- Para apps simples, parece não haver nada mais adequado que Dear ImGui
- A principal desvantagem ao projetar UIs complexas é que ele não é uma UI em retained mode, mas em immediate mode, então é necessário rodar um renderizador GPU como DirectX para renderizar a UI a mais de 60 quadros por segundo
- Mas, em todos os outros aspectos, ele se encaixa
- O programa compilado tem apenas 500 KB e não exige instalar o VC++ Redistributable
Opinião do GN⁺
- Como o autor disse, parece não existir uma biblioteca perfeita para desenvolvimento de apps GUI. Há trade-offs dependendo dos requisitos
- Para apps simples, Dear ImGui parece ser a melhor opção, mas para criar UIs complexas talvez seja melhor usar um toolkit GUI em retained mode
- Para criar apps comerciais, o custo de licença pode ser um fator importante. Bibliotecas como Qt têm custo alto, enquanto wxWidgets pode ser usado gratuitamente
- Criar apps GUI em C++ não é algo fácil, então pode ser mais realista desenvolver o frontend em C# ou outra linguagem e implementar em C++ apenas as partes intensivas em desempenho
- Se você quer um look-and-feel nativo no Windows, usar WinUI ou MFC pode ser melhor, mas se precisa de suporte multiplataforma, Qt ou wxWidgets podem ser escolhas melhores
7 comentários
hikogui é uma coisa assustadora mesmo ddd
https://getstream.io/blog/flutter-desktop-vs-electron/ Comparando o desempenho com várias métricas
Em comparação com Sciter e Electron, também vale a pena considerar o Flutter Windows Desktop Build. Há plugins que às vezes têm bugs, mas a base é sólida, então ele pode ser usado como meio de entrega.
Instância singleton, atualização automática, bandeja do sistema, notificações do Windows, tempo de inicialização rápido, linguagem Dart, plugin da Win32API etc.
Delphi
C++ Builder
"Para compilar com sucesso, é preciso ter doutorado em Ciência da Computação"
kkkk
Comentário no Hacker News
.execom menos de 40 MB. Tem uma licença gratuita para uso em desktop. Oferece estilos claro/escuro. Também inclui um editor WYSIWYG de arrastar e soltar (em desenvolvimento)wndproc. A maioria dos controles pergunta ao pai sobre as cores.execom nenhuma dependência ou com dependências mínimas, e com tamanho inferior a 40 MB.exe, dá para usar um único arquivo.htmlcom imagens/CSS/JavaScript inline