¿Cómo construyo una interfaz gráfica de usuario en C ++? [cerrado]

270

Todos mis programas de C ++ hasta ahora han estado utilizando la interfaz de línea de comandos y el único otro lenguaje con el que tengo experiencia es PHP que no admite GUI.

¿Dónde empiezo con la programación gráfica de la interfaz de usuario en C ++? ¿Cómo creo uno?

waiwai933
fuente
44
Depende. ¿A qué tipo de sistema operativo se dirige? Muchos marcos de GUI son específicos del sistema operativo.
Michael Ratanapintha
3
¿Qué sistema operativo / plataforma? O, si usted está interesado en escribir aplicaciones GUI multiplataforma, por favor digamos así - estas cosas hacen una gran diferencia para C ++ ...
Shog9
3
PHP admite la escritura de programas GUI. No hay ninguna razón por la que no pueda ejecutar programas PHP desde la línea de comandos, y hay bibliotecas de interfaz gráfica de usuario como PHP-GTK gtk.php.net y PHP-Qt php-qt.org que pueden ayudarlo. También puede evaluar por qué necesita c ++. Escribir GUI en c ++ es más difícil que en muchos otros lenguajes, y es posible que pueda agrupar su código de C ++ en bibliotecas invocables desde Python o C # o PHP o algo un poco más fácil para codificar las GUI.
kibibu
66
Tu pregunta es tan amplia que creo que no solo quieres los nombres de los juegos de herramientas o incluso solo algunos tutoriales. Desea algunos libros , que le den más que API o ejemplos, que realmente le den conceptos. KTC recomienda algunos a continuación, pero sugeriría, sea cual sea el kit de herramientas que elija para comenzar a jugar, asegúrese de encontrar uno sobre el que también pueda leer.
quark
66
"Escribir GUI en c ++ es más difícil que en muchos otros idiomas" ¿En qué se basa esta afirmación?
piotr

Respuestas:

163

Esencialmente, el sistema de ventanas de un sistema operativo expone algunas llamadas API que puede realizar para realizar trabajos como crear una ventana o colocar un botón en la ventana. Básicamente, obtienes un conjunto de archivos de encabezado y puedes llamar a funciones en esas bibliotecas importadas, tal como lo harías con stdlib y printf.

Cada sistema operativo viene con su propio kit de herramientas GUI, conjunto de archivos de encabezado y llamadas API, y su propia forma de hacer las cosas. También hay kits de herramientas multiplataforma como GTK , Qt y wxWidgets que lo ayudan a crear programas que funcionan en cualquier lugar. Logran esto al tener las mismas llamadas API en cada plataforma, pero una implementación diferente para esas funciones API que llaman a las llamadas API nativas del sistema operativo.

Una cosa que todos tendrán en común, que será diferente de un programa CLI, es algo llamado un bucle de eventos. La idea básica allí es algo complicada y difícil de comprimir, pero en esencia significa que no hay mucho en tu clase principal / función principal, excepto:

  • verifique la cola de eventos si hay nuevos eventos
  • si es así, envíe esos eventos a los controladores apropiados
  • cuando haya terminado, regrese el control al sistema operativo (generalmente con algún tipo de llamada de función especial "suspensión" o "selección" o "ceder")
  • entonces la función de rendimiento volverá cuando el sistema operativo haya terminado, y tenga otra vuelta al circuito.

Hay muchos recursos sobre programación basada en eventos. Si tiene alguna experiencia con JavaScript, es la misma idea básica, excepto que usted, el programador no tiene acceso o control sobre el ciclo de eventos en sí, o qué eventos hay, su único trabajo es escribir y registrar controladores.

Debe tener en cuenta que la programación de la GUI es increíblemente complicada y difícil, en general. Si tiene la opción, en realidad es mucho más fácil integrar un servidor web incorporado en su programa y tener una interfaz basada en HTML / web. La única excepción que he encontrado es Cocoa + Xcode + Apple Builder + tutoriales de Apple que lo hacen fácilmente el entorno más accesible para las personas nuevas en la programación GUI que he visto.

Bretón
fuente
"En realidad, es mucho más fácil integrar un servidor web incorporado en su programa y tener una interfaz basada en HTML / web ". Depende. Si desea hacer cosas elegantes (interfaz de usuario compleja, controles personalizados, animaciones, etc.), sí. Si simplemente desea una GUI típica (con los controles habituales y una sensación nativa), no.
bellota
167

Hay muchas bibliotecas GUI portátiles gratuitas , cada una con sus propias fortalezas y debilidades:

Especialmente Qt tiene buenos tutoriales y herramientas que lo ayudan a comenzar. ¡Disfrutar!

Sin embargo, tenga en cuenta que debe evitar la funcionalidad específica de la plataforma , como la API Win32 o MFC. Eso lo vincula innecesariamente a una plataforma específica con casi ningún beneficio.

vog
fuente
25
Personalmente, creo que programar en la API Win32 es hermoso. Me gusta mucho más que usar Qt, y eso en sí mismo es un beneficio. Sin embargo, tal vez solo soy yo.
mrduclaw
66
Mi experiencia personal es exactamente lo contrario. La API Win32 me causó más problemas que cualquier otra API.
vog
17
@mrduclaw, "Creo que programar para la API de Win32 es hermoso". Intento a toda costa escribir código portátil. (tenga en cuenta que usé la palabra "probar" porque hay excepciones ...) ¿Cómo se considera "hermoso" escribir código no portátil?
Trevor Boyd Smith
11
@Trevor Boyd Smith: diferentes objetivos, supongo. Casi ninguno de los códigos que he escrito profesionalmente podría haber sido multiplataforma, por lo que nunca ha sido una preocupación para mí.
mrduclaw
1
La pregunta de un millón de dólares es que los chicos que hacen entrenadores de juegos solo proporcionan un pequeño ejecutable y sus programas tienen una interfaz de usuario hermosa, así que me pregunto cómo construyen la interfaz de usuario, ¿no suministran estas bibliotecas de terceros?
user889030
74

Algoritmo independiente del sistema operativo " Creación de aplicaciones GUI en C ++ en tres pasos ":

  1. Instalar Qt Creator

    ingrese la descripción de la imagen aquí

  2. Crear nuevo proyecto (Aplicación Qt Widgets)

    ingrese la descripción de la imagen aquí

  3. Constrúyelo.

Felicidades, tienes tu primera GUI en C ++.

Ahora está listo para leer mucha documentación para crear algo más complicado que la aplicación GUI "Hello world".

Kirill V. Lyadvinsky
fuente
En el pasado, tuve problemas con otras GUI que no eran lo suficientemente amigables para principiantes. Pero, Qt tiene algunos excelentes tutoriales. ¡Gracias por la recomendación!
JD
23

Dado el comentario de "diga Windows XP como ejemplo", sus opciones son:

  • Interactúa directamente con el sistema operativo a través de su API, que para Microsoft Windows es una sorpresa sorpresa llamada Windows API . La referencia definitiva para WinAPI es el sitio web MSDN de Microsoft . Un popular tutorial en línea para principiantes es el Tutorial de programación API Win32 de Forger . El libro clásico para eso es Charles Petzold's Programming Windows, 5th Edition .

  • Utilice una biblioteca específica de plataforma (tanto en términos de sistema operativo como de compilador) como MFC , que envuelve el WinAPI en la clase C ++. La referencia para eso es nuevamente MSDN. Un libro clásico para eso es Jeff Prosise's Programming Windows with MFC, 2nd Edition . Si está utilizando, por ejemplo, CodeGear C ++ Builder, la opción aquí es VCL .

  • Utilice una biblioteca multiplataforma como GTK + (contenedor C ++: gtkmm ), Qt , wxWidgets o FLTKque envuelven la API específica del sistema operativo. Las ventajas de estos son que, en general, su programa podría compilarse para diferentes sistemas operativos sin tener que cambiar los códigos fuente. Como ya se mencionó, cada uno tiene sus propias fortalezas y debilidades. Una consideración al seleccionar cuál usar es su licencia. Para los ejemplos dados, GTK + & gtkmm tiene licencia bajo LGPL, Qt tiene varias licencias, incluida la opción propietaria, wxWidgets está bajo su propia licencia de wxWindows (con un cambio de nombre a wxWidgets License), y FLTK está bajo LGPL con excepción. Para referencia, tutorial y / o libros, consulte el sitio web de cada uno para obtener más detalles.

KTC
fuente
9
MFC es malvado. Preferiría usar WIN API si no tuviera otra opción.
the_drow
@the_drow ¿Qué pasa con sourceforge.net/projects/win32-framework
Jerry Jeremiah
18

Como ya he estado donde estás ahora, creo que puedo "responderte".

El hecho es que no hay una manera fácil de hacer una GUI. Las GUI dependen en gran medida de la plataforma y del código específico del sistema operativo, es por eso que debe comenzar a leer la plataforma de destino / documentación del sistema operativo en las API de administración de ventanas. Lo bueno es que hay muchas bibliotecas que abordan estas limitaciones y diferencias de arquitectura abstracta en una sola API multiplataforma. Los sugeridos anteriormente, GTK y Qt, son algunas de estas bibliotecas.

Pero incluso estos son un poco demasiado complicados, ya que se introducen muchos conceptos, tipos de datos, espacios de nombres y clases nuevos, todo a la vez. Por esta razón, suelen venir con algún editor de GUI WYSIWYG. Prácticamente hacen posible el software de programación con GUI.

En resumen, también hay "entornos" no libres para el desarrollo de GUI como Visual Studio de Microsoft. Para aquellos con experiencia en Delphi , Visual Studio puede ser más familiar. También hay alternativas gratuitas al entorno completo de Visual Studio suministrado por Microsoft: Visual Studio Express , que es más que suficiente para comenzar el desarrollo de la GUI.

Araña
fuente
15

Encontré un sitio web con un tutorial "simple": http://www.winprog.org/tutorial/start.html

ZippyV
fuente
8
Esto presenta la API Win32, un enfoque de muy bajo nivel para la programación GUI que lo vincula a la plataforma Windows. No lo recomendaría.
vog
17
Es una opción válida Estoy de acuerdo en que podría no ser el mejor lugar para comenzar, pero no merece un voto negativo.
Emil H
1
Sé que esta no es la solución ideal, pero ayuda a aprender cómo funciona el sistema GUI en Windows. Leí este tutorial hace un par de años y ahora sé cuál es el bucle de mensajes y cómo funciona. Al trabajar con winforms en .net, este conocimiento puede ser útil.
ZippyV
77
Si va a escribir aplicaciones de escritorio, no hay sustituto para saber cómo el SO realmente representa e interactúa con el usuario. Si solo usa una biblioteca sin comprender los fundamentos, nunca entenderá realmente lo que está sucediendo. Aprender un poco de programación win32 gui de bajo nivel será un tiempo bien invertido.
Jim en Texas
@Jim en Texas: estoy de acuerdo, pero este "nivel bajo" se debe aprender después de lo básico, por lo que todavía considero que esa recomendación es inapropiada para principiantes.
vog
3

Es fácil crear una GUI de Windows .NET en C ++.

Consulte el siguiente tutorial de MSDN . Puede descargar todo lo que necesita (Visual C ++ Express) de forma gratuita .

Por supuesto, te vinculas a .NET, pero si solo estás jugando o solo necesitas una aplicación de Windows, estarás bien (la mayoría de las personas todavía tienen Windows ... por ahora).

Justicle
fuente
3

Yo uso FLTK porque Qt no es gratis. No elijo wxWidgets , porque mi primera prueba con un simple Hello, World! El programa produjo un ejecutable de 24 MB, FLTK 0.8 MB ...

pernecker
fuente
44
Debido a los cambios de licencia de QT, planeo cambiar a QT
pernecker
2
Mi propio programa de wxWidgets es de 5.9 Mb, incluso con todas las bibliotecas vinculadas dentro
msangel