¿Cómo construyo una interfaz gráfica de usuario en C++? [cerrado]
Todos mis programas en C++ hasta ahora han estado usando la interfaz de línea de comandos y el único otro lenguaje con el que tengo experiencia es PHP, que no admite GUI.
¿Por dónde empiezo con la programación de interfaz gráfica de usuario en C++? ¿Cómo creo uno?
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 funciones en esas bibliotecas importadas, tal como lo harías con stdlib y printf
.
Cada sistema operativo viene con su propio conjunto de herramientas GUI, conjunto de archivos de encabezado y llamadas API, y su propia forma de hacer las cosas. También existen kits de herramientas multiplataforma como GTK , Qt y wxWidgets que le ayudan a crear programas que funcionan en cualquier lugar. Lo logran al tener las mismas llamadas API en cada plataforma, pero una implementación diferente para aquellas 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 bucle de eventos. La idea básica es algo complicada y difícil de comprimir, pero en esencia significa que no hay mucho que entrar en tu clase principal/función principal, excepto:
- verifique la cola de eventos si hay algún evento nuevo
- si es así, envíe esos eventos a los controladores apropiados
- cuando haya terminado, devuelva el control al sistema operativo (generalmente con algún tipo de llamada de función especial de "suspensión", "selección" o "cedimiento")
- luego, la función de rendimiento regresará cuando el sistema operativo finalice y tendrá que volver a recorrer el ciclo.
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 scripter, no tiene acceso ni control sobre el bucle de eventos en sí, o qué eventos hay, su único trabajo es escribir y registrar controladores.
Debes tener en cuenta que la programación de GUI es increíblemente complicada y difícil, en general. Si tiene la opción, en realidad es mucho más fácil simplemente integrar un servidor web integrado en su programa y tener una interfaz basada en HTML/web. La única excepción que he encontrado es Cocoa + Xcode + constructor de interfaces + tutoriales de Apple que lo convierten fácilmente en el entorno más accesible para personas nuevas en la programación GUI que he visto.
Hay muchas bibliotecas GUI portátiles gratuitas , cada una con sus propias fortalezas y debilidades:
- cuarto
- Estimado ImGui
- GTKmm (basado en GTK+ )
- wxWidgets
- FLTK
- Definitivo++
- JUGO
- ...
Especialmente Qt tiene buenos tutoriales y herramientas que le ayudarán a empezar. ¡Disfrutar!
Sin embargo, tenga en cuenta que debe evitar las funciones específicas de la plataforma , como la API Win32 o MFC. Eso lo vincula innecesariamente a una plataforma específica sin casi ningún beneficio.
Algoritmo independiente del sistema operativo " Creación de aplicaciones GUI en C++ en tres pasos ":
Instalar Qt Creador
Crear nuevo proyecto (aplicación Qt Widgets)
Constrúyelo.
Felicitaciones, 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 "Hola mundo".
Dado el comentario de "digamos 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 llamada API de Windows . 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 TheForger . El libro clásico para esto es Programming Windows, 5th Edition de Charles Petzold .
Utilice una biblioteca específica de la plataforma (tanto en términos de sistema operativo como de compilador), como MFC , que encapsula WinAPI en la clase C++. La referencia para esto es nuevamente MSDN. Un libro clásico para esto es Programación de Windows con MFC, 2.ª edición de Jeff Prosise . Si está utilizando, por ejemplo, CodeGear C++ Builder, entonces la opción aquí es VCL .
Utilice una biblioteca multiplataforma como GTK+ (contenedor de C++: gtkmm ), Qt , wxWidgets o FLTK que empaquetan la API del sistema operativo específico. Las ventajas de esto son que, en general, su programa podría compilarse para diferentes sistemas operativos sin tener que cambiar los códigos fuente. Como ya se ha mencionado, cada uno tiene sus propias fortalezas y debilidades. Una consideración a la hora de seleccionar cuál utilizar es su licencia. Para los ejemplos dados, GTK+ y gtkmm tienen licencia LGPL, Qt tiene varias licencias, incluida la opción de propiedad, wxWidgets tiene su propia licencia wxWindows (con un cambio de nombre a Licencia wxWidgets) y FLTK tiene licencia LGPL con excepción. Para obtener referencias, tutoriales o libros, consulte el sitio web de cada uno para obtener más detalles.
Como ya estuve donde estás ahora, creo que puedo "responderte".
El hecho es que no existe una manera fácil de crear una GUI. Las GUI dependen en gran medida del código específico de la plataforma y del sistema operativo, es por eso que debe comenzar a leer la documentación de su plataforma/sistema operativo de destino sobre 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 única API multiplataforma. Las sugeridas antes, GTK y Qt, son algunas de estas librerías.
Pero incluso estos son 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 incluidos con algún editor GUI WYSIWYG. Prácticamente hacen posible la programación de software con GUI.
En resumen, también existen "entornos" no gratuitos para el desarrollo de GUI, como Visual Studio de Microsoft. Para aquellos con experiencia en Delphi , Visual Studio puede resultar más familiar. También existen alternativas gratuitas al entorno completo de Visual Studio proporcionado por Microsoft: Visual Studio Express , que es más que suficiente para comenzar con el desarrollo de GUI.