Boa biblioteca GUI C ++ para Windows

Eu estou procurando uma boa biblioteca GUI do windows para C ++. As características ideais na minha opinião devem ser:

  • Moderna MFC, wxWidgets, Qt foram iniciados há muito tempo e eles não usam resources modernos de C ++ e biblioteca padrão.
  • Tenha um rico conjunto de controles com resources decentes. A capacidade de eliminar HTML em quase todos os lugares é uma felicidade para a qual adoro o wxWidgets quando não o odeio.
  • Código aberto . É a obrigação. Se as fonts estão disponíveis após a compra, então é considerado ok.
  • Tem um designer de formulário de alguma forma . Sim, seria ótimo. Depois de anos trabalhando com o Delphi, eu choro toda vez que especifico manualmente o tamanho dos controles.
  • Gratuito para uso comercial . Mas se alguma biblioteca é realmente boa, então considerarei comprá-la.
  • Plataforma cruzada . Esta especificação é apenas um desempatador ☺. Eu posso viver sem isso.

Por favor, sugira suas idéias para os candidatos. Uma biblioteca por resposta, por favor.

Eu acho que você está escrevendo Qt off muito rapidamente; ele não usa muito a biblioteca padrão, mas isso tem menos a ver com ser obsoleto do que com ter prioridades diferentes. Os contêineres QT usam iteradores, algoritmos de modelo, etc, mas possuem um modelo de iterador diferente; Os iteradores do Qt apontam entre elementos e não entre eles. Isso faz com que o avanço e a inversão sejam simétricos e limpe alguns casos de borda para inserir e remover elementos durante a movimentação, embora seja um pouco menos eficiente. E eles também fornecem iteradores de estilo STL. É uma opção válida para um IMO da biblioteca GUI; É improvável que o desempenho dos contêineres seja o fator crítico.

Quanto ao pré-processador (moc), pense nele mais como um compilador de IDL que sabe como ler headers de C ++ em vez de precisar de sua própria linguagem. Ele não pré-processa seu código, que é compilado diretamente. Ele apenas gera um arquivo cpp adicional contendo o empacotamento para retornos de chamada de sinal / slot, que podem ficar um pouco confusos quando eles cruzam os limites dos encadeamentos e precisam de synchronization.

O Qt é gratuito se você puder liberar suas fonts (mesmo para uso comercial; quantas ferramentas internas realmente precisam ser proprietárias), e sem preço razoável se você não puder (nenhum royalties por unidade ou qualquer coisa particularmente irritante)

Se você estiver procurando por uma biblioteca de GUI C ++ moderna , então o Adam & Eve da Adobe Source Library (ASL) é a coisa certa (ela depende muito das bibliotecas do Boost ).

O que eu realmente gosto sobre isso, é que o design do layout é completamente desacoplado do código. A definição do layout pode estar em um arquivo externo, para que o usuário possa alterar o layout sem recompilar o programa.

Um exemplo do site:

layout clipping_path { view dialog(name: "Clipping Path") { column(child_horizontal: align_fill) { popup(name: "Path:", bind: @path, items: [ { name: "None", value: empty }, { name: "Path 1", value: 1 }, { name: "Path 2", value: 2 } ]); edit_number(name: "Flatness:", digits: 9, bind: @flatness); } button(name: "OK", default: true, bind: @result); } } 

Que produzirá:

clippingpath

Além disso, o ASL também tem algumas outras classs úteis de utilitários.

Edit: mas ( ainda ) não tem um designer de formulários.

WTL é um moderno framework GUI criado por Nenad Stefanovic da equipe ATL. É leve, mas ainda suporta todos os resources modernos do sistema operacional.

Biblioteca de modelos do Windows

A Biblioteca de Modelos do Windows (WTL) é uma biblioteca C ++ para desenvolver aplicativos do Windows e componentes de interface do usuário. Ele estende ATL (Active Template Library) e fornece um conjunto de classs para controles, diálogos, janelas de quadro, objects GDI e muito mais.

A documentação não oficial mora no Code Project .

Você deveria dar uma olhada no gtkmm . Está escrito em c ++ moderno, usa stl, segue suas convenções, inclui suporte para utf-8. Além disso, é open source, multi-plataforma e licenciado sob o lgpl. Do site deles:

Características:

  • Use inheritance para derivar widgets customizados.
  • Manipuladores de sinal de tipo seguro, no padrão C ++.
  • Polimorfismo.
  • Uso da Biblioteca C ++ Padrão, incluindo seqüências de caracteres, contêineres e iteradores.
  • Internacionalização completa com UTF8.
  • Gerenciamento completo de memory C ++
    • Composição do object
    • Desalocação automática de widgets dinamicamente alocados.
  • Uso total dos namespaces do C ++.
  • Sem macros.
  • Plataformas cruzadas: Linux (gcc), FreeBSD (gcc), NetBSD (gcc), Solaris (gcc, Forte), Win32 (gcc, MSVC ++ .Net 2003), MacOS X (gcc), outros
  • Software livre e gratuito para Open Source e desenvolvimento proprietário.
  • Discutido, projetado e implementado em público.

wxWidgets – gratuito, permitido para aplicação comercial com muitos designers disponíveis ( http://wxdsgn.sourceforge.net/ , http://www.dialogblocks.com/ , http://wxformbuilder.org/ , http: // wxglade. sourceforge.net/ …).

Eu pessoalmente escrevo muitos dos meus widgets a partir do zero, mas isso não é uma opção sempre.

Dê uma olhada no eGUI ++, ele tem um belo modelo de object moderno. Você pode ver um artigo do MDN Levar a simplicidade dos formulários do Windows para aplicativos nativos E você pode baixar o código do site do John Torjo

Eu recomendo JUCE , é bom limpo e moderno c ++ que é muito bem documentado com comentários doxy. Tem uma grande variedade de classs de gui e é muito simples de ampliar as existentes. A biblioteca também abrange mais do que apenas o gui, há muitos códigos para manipulação e geração de som, para encadeamento, leitura / gravação de formatos de imagem modernos, rede básica e muito mais. Parece bom também (tem um tipo de sensação de OS X por padrão) e é de plataforma cruzada.

O lado negativo: Embora seja livre (em ambos os sentidos) para uso não comercial, o uso comercial requer a licença comercial, que é bastante onerosa.

Tudo sumdo, definitivamente vale a pena uma olhada, eu usei para vários projetos de hobby, um dos quais pretendo lançar em algum momento. Isso realmente torna o código gui em c + + divertido, e isso é dizer alguma coisa!

Houve uma época em que eu tinha algum interesse pelo Ultimate ++ . A licença Nice (BSD), um IDE, suporta vários compiladores, usados ​​em diversas aplicações complexas do mundo real (muito importante!), Etc.
Eu nunca tive tempo de investir lá, mas ainda vejo isso como uma alternativa interessante.

Nana C ++ Library tem como objective a biblioteca fácil de usar e portátil, fornece uma estrutura GUI e threads para fácil programação com methods modernos de C ++, como traços, metaprogramação e outras tecnologias de template.

Um blog para este projeto: http://sourceforge.net/p/nanapro/blog

Faça o download do último lançamento em http://sourceforge.net/projects/nanapro

Eu me pergunto por que este não foi mencionado antes: eu recomendaria CEGUI , que é multi-plataforma (incluindo Windows) e suporta OpenGL, bem como DirectX, permitindo que você integre-o em qualquer aplicativo de jogos ou renderização / visualização. Também parece satisfazer todas as suas necessidades perfeitamente.

  • Moderna (usa STL , XML para seus arquivos de ativos, e suporta internamente o padrão C99 para compatibilidade máxima, após o Release 1.0 ele estará usando o C ++ 11 na ramificação de desenvolvimento). Ele também suporta caracteres unicode e todo tipo de linguagem (como pode ser visto nas amostras).

  • Oferece os seguintes widgets prontos para uso: campos de texto (roláveis), checkboxs de edição, checkboxs de edição multilinhas, giratórios, checkboxs de seleção, botões, botões de rádio, janelas com guias, barras de progresso, painéis roláveis, controles deslizantes e menus suspensos (comboboxes) , barras de menu, contêineres de layout (vertical / horizontal) e mais

  • Publicado sob a licença do Open Source MIT , uma das licenças que oferecem mais liberdade, você só precisará distribuir o arquivo de licença com o aplicativo e pronto

  • Os layouts podem ser facilmente criados e editados usando um editor WYSIWYG escrito em Python. É chamado CEED e também está disponível gratuitamente. Ele passou por muitos testes e é adequado para ser usado na produção. Uma versão estável foi publicada e novos resources estão em desenvolvimento para o futuro. Um editor de imagens também está disponível no mesmo aplicativo.

  • Como afirmado, isso é gratuito para uso comercial . A única obrigação que você tem é distribuir o arquivo de licença.

  • O CEGUI é adequado para uso em várias plataformas . Ele oficialmente suporta Windows, Linux, Mac OS . Também foi usado em iOS e Android. O Android é suportado no ramo de desenvolvimento.

Ele foi originalmente projetado como uma biblioteca GUI para jogos, mas também é perfeito para uso em aplicações científicas, renderização de aplicativos, visualização. Aplicações de desktop podem ser feitas também. Uma aparência simples semelhante ao Windows está disponível nos ativos padrão.

Ele existe há mais de 10 anos, tem uma comunidade ativa e é uma biblioteca robusta, rica em resources e extensível.

Eu daria uma segunda olhada no Qt – não é grátis para uso comercial, mas eles têm uma boa licença de nível de input se você está apenas começando. Eu acho que a interface deles é bastante moderna, embora eu não gostasse que eles parecessem confiar em extensões de linguagem que eles pré-processam.

O que especificamente você está procurando na categoria Modern?

Ambos wx e QT podem usar a biblioteca padrão. Eles contêm suas próprias classs de coleção (como o MFC) dos dias, não há muitos anos, quando o suporte do compilador para STL era irregular. Algumas inclusões como strings copy-on-write ainda não estão no STL.

Ambos poderiam usar templates para alguns dos mecanismos de dispatch que são feitos por macros (wx) ou pelo pré-compilador (QT), mas que não ganhariam nada a não ser código menos legível.

Eu também comecei recentemente a procurar por uma GUI e comecei a experimentar cada uma delas. Até onde posso dizer:

  • O Qt não é apenas uma biblioteca GUI, mas também um framework (incluindo ECMAScript, SQL, suporte XML e mais).
  • Qt é uma escolha sólida e pode ser entendida por hacking em cerca de meia hora.
  • infelizmente, o Qt força você a usar o modelo de programação deles, mas você pode facilmente evitá-lo e escrever código no seu estilo.
  • Qt é de propriedade da Nokia, e se você é uma pessoa que considera questões políticas ao escolher uma biblioteca, a Nokia recentemente fez um acordo com a Microsoft para usar o Windows Phone 7 em seus telefones.
  • O GTK + foi minha escolha pessoal, mas não é nativa em todas as plataformas. Embora ele execute na mesma velocidade que os controles nativos do Windows, às vezes é mais rápido.
  • As portas wxWidgets são nativas em todas as plataformas e é minha segunda referência pessoal depois do GTK +, já que não é orientada para o lucro.

Você já olhou para o kit de ferramentas da Fox ?

Eu tenho que jogar meu chapéu com Qt. Somos detentores de licenças comerciais de Qt e, embora caros, valem cada dólar. A base do código Qt é muito sólida. O designer da GUI é uma das melhores ferramentas desse tipo. Um tempo atrás nós avaliamos um grupo de kits de ferramentas GUI disponíveis para janelas uns contra os outros e o Qt saiu à frente em todos os aspectos, então eu vi alguns desses outros kits de ferramentas.

Se você quer balas aqui são minhas …

  • Orientado a objects, o Qt tem uma arquitetura OO muito boa que é muito consistente em toda a hierarquia de classs

  • Sinais e slots oferecem uma boa maneira de lidar com o problema de retorno de chamada sempre presente no desenvolvimento de interfaces de usuário

  • Embora um pouco excessivamente complicado, ele o direciona para uma arquitetura MVC de exibição de dados, o que não é uma coisa ruim

  • Além do grande conjunto de classs de UI, há um conjunto quase maior de outras classs que suportam Operações de BD, Threading, Rede e outras tarefas.

Sim, o Qt utiliza internamente os contêineres não STL e não-STL. Mas não deixe que isso seja o seu critério para desqualificar o QT. Todos os contêineres QT possuem o STL como iteradores, e a class String possui muitos resources. Por último mas não menos importante, tem um bom suporte multiplataforma.

Eu voto na WTL. Leve e nativo. Você não pode vencer esses dois critérios da minha perspectiva. Eu escrevo minha camada de modelo em stl c ++ e uso as bibliotecas nativas por sistema operacional. Isso garante que seus aplicativos não fiquem parecidos com a bunda e permite que você faça uso da maior variedade de resources em cada sistema operacional.

Para um designer de GUI da WTL eu recomendo o excelente, mas por algum motivo totalmente desconhecido para a maioria dos WTLBuilder: http://www.wtlbuilder.com.

E quanto ao Smartwin ++ ?

O wiki deles parece estar em baixo agora. Amostra Hello World! código do Smartwin ++ docs

Desde que você chamou o Delphi: Você sabe que o Borland C ++ Builder também faz o VCL como o Delphi? Você pode distribuir gratuitamente e obter o código-fonte.

E quanto ao winx ?

Melhor tarde do que nunca, mas você pode achar isso interessante . Seus únicos requisitos que satisfazem são “Open Source” e “Free”. Ele faz algo que você não pediu

  • reduza seu código-fonte em uma ordem de grandeza

  • lhe dá controle total sobre layout, binding de dados, arrays de variables ​​de controles, etc.

Quando você vê como funciona, você pode adicionar facilmente seus próprios controles.

BTW – tem mais uma desvantagem – é viciante.

Eu recomendo usar o Qt porque:

  • É multi-plataforma e abrange ampla gama de sistemas operacionais (incluindo móveis)
  • É opensource e tem uma velocidade rápida na obtenção de melhor
  • Tem um bom designer de GUI e um IDE muito capaz (Qt Creator)
  • O design da API é excelente e fácil de usar
  • Tem uma ótima documentação que é fácil de ler
  • Tem o sistema de tradução Qt, que permite que você tenha um aplicativo multilíngüe
  • O sistema de layout da GUI, onde os widgets se redimensionam de acordo com um layout, torna tudo muito mais fácil
  • O QML dá a você o poder de criar uma GUI fantástica com ótimos charts e animações
  • Possui ótimo suporte para rede e conectividade (socket, SSL, www, IPC, …)
  • Tem QTestLib para testar o código
  • Ele tem muitos enlace de linguagem se você não quiser usar o C ++