Como crio uma interface gráfica de usuário em C ++? [fechadas]

270

Até agora, todos os meus programas em C ++ usam a interface da linha de comandos e a única outra linguagem com a qual tenho experiência é o PHP, que não suporta GUIs.

Por onde começo com a programação da interface gráfica do usuário em C ++? Como crio um?

waiwai933
fonte
4
Depende. Que tipo de sistema operacional você está alvejando? Muitas estruturas de GUI são específicas do sistema operacional.
22630 Michael Ratanapintha
3
Qual SO / plataforma? Ou, se você estiver interessado em escrever aplicações GUI multi-plataforma, por favor dizê-lo - estas coisas fazem uma grande diferença para C ++ ...
Shog9
3
O PHP suporta a gravação de programas GUI. Não há razão para que você não possa executar programas PHP a partir da linha de comando, e existem bibliotecas de gui como PHP-GTK gtk.php.net e PHP-Qt php-qt.org que podem ajudar Você também pode avaliar por que precisa c ++. Escrever GUIs em c ++ é mais difícil do que em muitas outras linguagens, e você pode agrupar seu código c ++ em bibliotecas que podem ser chamadas de Python ou C # ou PHP ou algo um pouco mais fácil de codificar.
kibibu
6
Sua pergunta é tão ampla que acho que você não quer apenas os nomes dos kits de ferramentas ou mesmo alguns tutoriais. Você quer alguns livros , que oferecem mais do que APIs ou exemplos, que realmente oferecem conceitos. O KTC recomenda alguns abaixo, mas eu sugiro que, seja qual for o kit de ferramentas que você escolher para começar a jogar, certifique-se de encontrar um sobre o qual você possa ler também.
quark
6
"Escrever GUIs em c ++ é mais difícil do que em muitos outros idiomas" Em que você está baseando essa afirmação?
Piotr

Respostas:

163

Essencialmente, o sistema de janelas de um sistema operacional expõe algumas chamadas de API que você pode executar para executar tarefas como criar uma janela ou colocar um botão na janela. Basicamente, você obtém um conjunto de arquivos de cabeçalho e pode chamar funções nessas bibliotecas importadas, como faria com stdlib e printf.

Cada sistema operacional vem com seu próprio kit de ferramentas da GUI, conjunto de arquivos de cabeçalho e chamadas de API, e sua própria maneira de fazer as coisas. Também existem kits de ferramentas de plataforma cruzada, como GTK , Qt e wxWidgets, que ajudam a criar programas que funcionam em qualquer lugar. Eles conseguem isso tendo as mesmas chamadas de API em cada plataforma, mas uma implementação diferente para as funções de API que chamam as chamadas de API do SO nativo.

Uma coisa que todos eles têm em comum, que será diferente de um programa CLI, é algo chamado loop de evento. A idéia básica é um pouco complicada e difícil de compactar, mas, em essência, significa que não há muita coisa acontecendo na sua classe principal / função principal, exceto:

  • verifique a fila de eventos se houver novos eventos
  • se houver, envie esses eventos para manipuladores apropriados
  • quando terminar, retorne o controle ao sistema operacional (geralmente com algum tipo de chamada de função "suspensão" ou "seleção" ou "transferência" especial)
  • então a função yield retornará quando o sistema operacional estiver concluído e você terá outra ação ao redor do loop.

Existem muitos recursos sobre programação baseada em eventos. Se você tem alguma experiência com JavaScript, é a mesma ideia básica, exceto que você, o scripter, não tem acesso ou controle sobre o próprio loop de eventos ou sobre quais eventos existem, seu único trabalho é escrever e registrar manipuladores.

Você deve ter em mente que a programação da GUI é incrivelmente complicada e difícil, em geral. Se você tiver a opção, é realmente muito mais fácil integrar um servidor da Web incorporado ao seu programa e ter uma interface baseada em HTML / Web. A única exceção que encontrei são os tutoriais do construtor de interfaces Cocoa + Xcode + da Apple, que o tornam facilmente o ambiente mais acessível para pessoas novas na programação de GUI que eu já vi.

Bretão
fonte
" é realmente muito mais fácil integrar um servidor da web incorporado ao seu programa e ter uma interface baseada em html / web. " Depende. Se você quiser fazer coisas sofisticadas (UI complexa, controles personalizados, animações etc.), sim. Se você simplesmente deseja uma GUI típica (com os controles usuais e um sentimento nativo), não.
Acorn
167

Existem muitas bibliotecas de GUI portáteis gratuitas , cada uma com seus próprios pontos fortes e fracos:

Especialmente o Qt possui bons tutoriais e ferramentas que ajudam você a começar. Aproveitar!

Observe, no entanto, que você deve evitar funcionalidades específicas da plataforma , como a API do Win32 ou o MFC. Isso o vincula desnecessariamente a uma plataforma específica, quase sem benefícios.

vog
fonte
25
Pessoalmente, acho que a programação para a API do Win32 é linda. Eu gosto muito mais do que usar o Qt, e isso por si só é um benefício. Talvez seja apenas eu, no entanto.
Mduclaw 26/12/2009
6
Minha experiência pessoal é exatamente o oposto. A API do Win32 causou mais problemas para mim do que qualquer outra API.
vog
17
@mrduclaw, "Eu acho linda a programação para a API do Win32". Tento a todo custo escrever código portátil. (observe que usei a palavra "tentar" porque há exceções ...) Como escrever código não portátil é considerado "bonito"?
Trevor Boyd Smith
11
@ Trevor Boyd Smith: Objetivos diferentes, suponho. Quase nenhum código que eu já escrevi profissionalmente poderia ter sido multiplataforma, então isso nunca foi uma preocupação para mim.
mrduclaw
1
A pergunta de um milhão de dólares é que os caras que fazem treinadores de jogos apenas fornecem exe pequeno e seus programas têm uma interface bonita, então eu me pergunto como eles constroem a interface do usuário. Eles não fornecem essas bibliotecas de terceiros com ela?
user889030
74

Algoritmo independente do SO " Criando aplicativos GUI em C ++ em três etapas ":

  1. Instale o Qt Creator

    insira a descrição da imagem aqui

  2. Criar novo projeto (aplicativo Qt Widgets)

    insira a descrição da imagem aqui

  3. Construa.

Parabéns, você conseguiu sua primeira GUI em C ++.

Agora você está pronto para ler muita documentação para criar algo mais complicado do que o aplicativo GUI "Hello world".

Kirill V. Lyadvinsky
fonte
No passado, eu tive problemas com outras GUIs que não eram suficientemente amigáveis ​​para iniciantes. Mas, o Qt tem ótimos tutoriais. Obrigado pela recomendação!
JD
23

Dado o comentário de "diga o Windows XP como exemplo", suas opções são:

  • Interaja diretamente com o sistema operacional por meio de sua API, que para o Microsoft Windows é uma surpresa chamada chamada API do Windows . A referência definitiva para o WinAPI é o site MSDN da Microsoft . Um popular tutorial para iniciantes on-line é o Tutorial de programação da API Win32 do the Forger . O livro clássico para isso é o Windows de programação de Charles Petzold , 5ª edição .

  • Use uma biblioteca específica da plataforma (em termos de SO e compilador), como o MFC , que agrupa a WinAPI na classe C ++. A referência para isso é novamente MSDN. Um livro clássico para isso é o Windows de programação de Jeff Prosise com MFC, 2ª edição . Se você estiver usando o CodeGear C ++ Builder, a opção aqui é VCL .

  • Use uma biblioteca de plataforma cruzada, como GTK + (wrapper C ++: gtkmm ), Qt , wxWidgets ou FLTKque envolvem a API do sistema operacional específico. As vantagens disso são que, em geral, seu programa pode ser compilado para diferentes sistemas operacionais sem precisar alterar os códigos-fonte. Como já foi mencionado, cada um tem suas próprias forças e fraquezas. Uma consideração ao selecionar qual usar é sua licença. Para os exemplos dados, GTK + & gtkmm é licença sob LGPL, Qt está sob várias licenças, incluindo opção proprietária, wxWidgets está sob sua própria licença wxWindows (com uma renomeação para licença wxWidgets) e FLTK está sob LGPL com exceção. Para referência, tutorial e / ou livros, consulte o site de cada um para obter detalhes.

KTC
fonte
9
MFC é mau. Eu preferiria usar a API do WIN se não tivesse outra escolha.
the_drow
@the_drow E sobre sourceforge.net/projects/win32-framework
Jerry Jeremias
18

Desde que eu já estive onde você está agora, acho que posso "responder" a você.

O fato é que não há uma maneira fácil de criar uma GUI. As GUIs são altamente dependentes da plataforma e do código específico do SO, é por isso que você deve começar a ler a documentação da plataforma / SO de destino nas APIs de gerenciamento de janelas. A coisa boa é: existem muitas bibliotecas que tratam dessas limitações e diferenças de arquitetura abstrata em uma única API de várias plataformas. Os sugeridos anteriormente, GTK e Qt, são algumas dessas bibliotecas.

Mas mesmo estes são um pouco demasiado complicado, já que muitos novos conceitos, tipos de dados, namespaces e classes são introduzidos, de uma só vez. Por esse motivo, eles costumam ser fornecidos com algum editor da GUI WYSIWYG. Eles praticamente tornam possível o software de programação com GUIs.

Para resumir, também existem "ambientes" não livres para o desenvolvimento de GUI, como o Visual Studio da Microsoft. Para aqueles com experiência em Delphi , o Visual Studio pode ser mais familiar. Também existem alternativas gratuitas para o ambiente completo do Visual Studio fornecido pela Microsoft: Visual Studio Express , que é mais do que suficiente para iniciar o desenvolvimento da GUI.

Spidey
fonte
15

Encontrei um site com um tutorial "simples": http://www.winprog.org/tutorial/start.html

ZippyV
fonte
8
Isso apresenta a API do Win32, uma abordagem de nível muito baixo à programação da GUI que o vincula à plataforma Windows. Eu não recomendaria isso.
Vog
17
É uma opção válida. Concordo que talvez não seja o melhor lugar para começar, mas não merece voto negativo.
Emil H
1
Sei que essa não é a solução ideal, mas ajuda a aprender como o sistema de GUI no Windows funciona. Eu li este tutorial há alguns anos e agora sei o que é o loop de mensagens e como ele funciona. Ao trabalhar com winforms no .net, esse conhecimento pode ser útil.
27210 ZippyV
7
Se você estiver escrevendo aplicativos de desktop, não há substituto para saber como o sistema operacional realmente processa e interage com o usuário. Se você apenas usar uma biblioteca sem entender os fundamentos, nunca entenderá realmente o que está acontecendo. Aprender um pouco da programação win32 gui de baixo nível será um tempo bem gasto.
21419 Jim No Texas
@ Jim No Texas: eu concordo, mas esse "pouco de baixo nível" deve ser aprendido após o básico, então ainda acho essa recomendação inadequada para iniciantes.
Vog
3

É fácil criar uma GUI do Windows .NET em C ++.

Consulte o seguinte tutorial do MSDN . Você pode baixar tudo o que precisa (Visual C ++ Express) gratuitamente .

É claro que você se liga ao .NET, mas se estiver apenas brincando ou precisando de um aplicativo Windows, ficará bem (a maioria das pessoas ainda tem o Windows ... por enquanto).

Justicle
fonte
3

Eu uso o FLTK porque o Qt não é gratuito. Não escolho wxWidgets , porque meu primeiro teste com um simples Olá, Mundo! programa produziu um executável de 24 MB, FLTK 0,8 MB ...

pernecker
fonte
4
Devido às mudanças de licença QT, eu pretendo mudar para QT
Pernecker
2
O meu próprio programa wxWidgets é de 5,9 Mb, mesmo com todas as bibliotecas vinculadas dentro do
arquivo