Pregunta

Soy un programador de C # que comenzó a usar ubuntu hace aproximadamente 2 años. Quiero aprender programación de GUI en C o C ++. Realmente no me gusta el mono, tiende a fallar en mi sistema. Tengo una comprensión básica de C ++. Nunca he trabajado en C, pero se ve genial. ¿Qué kit de herramientas debo aprender / usar? Dar Pro / Contras de cada uno. Gracias!

¿Fue útil?

Solución

Dado que C ++ te es más familiar, es posible que GTKmm sea más adecuado, ya que puedes usar modismos como RAII. Desafortunadamente, GTKmm está un poco incompleto y le faltan algunas de las partes menos utilizadas de GTK.

GTK + por sí solo, sin embargo, esencialmente expone un modelo de objeto similar al que se encuentra en C ++, pero con solo funciones de C. Cosas como la construcción y destrucción en C ++ se hacen explícitamente en la API de C y las instancias de widgets se manejan exclusivamente mediante punteros.

Pruebe ambos y vea cuál se adapta mejor a su proyecto.

Otros consejos

Podría ser acusado de sesgo ya que ayudo a contribuir a gtkmm, pero primero fui un usuario, así que ... En cualquier caso, recomendaría gtkmm si te sientes cómodo con C ++. La administración de memoria es mucho más fácil con gtkmm que con GTK + porque los objetos contados por referencia se administran automáticamente con punteros inteligentes. También puede crear instancias de objetos como variables automáticas (por ejemplo, en la pila) y determinar su duración según su alcance. En la práctica, es mucho más fácil evitar pérdidas de memoria con gtkmm que con GTK +.

Otra ventaja enorme de gtkmm sobre GTK + (en mi opinión) es el uso de un marco de señales de tipo seguro. En GTK +, constantemente debes pasar las cosas como punteros vacíos y luego lanzarlas al tipo que crees que deberían ser. En gtkmm, no necesita hacer esto, y puede aprovechar el compilador que impone la seguridad de tipo en sus manejadores de señal.

Otra gran ventaja sobre C / GTK + es la facilidad de derivar nuevas clases. En GTK +, debe escribir una gran cantidad de código repetitivo y, básicamente, volver a implementar cosas que obtiene de forma gratuita en C ++ como parte del lenguaje (por ejemplo, herencia, constructores, destructores, etc.). Esto es más tedioso y propenso a errores.

greyfade mencionó que gtkmm está incompleto, y tiene razón hasta cierto punto: gtkmm no cubre absolutamente todo en la API GTK + (aunque se acerca mucho). Pero en la práctica esto no es un problema porque siempre puede usar la API C / GTK + directamente desde su código gtkmm. Esta compatibilidad con C es una gran ventaja de C ++ sobre algo como C # o enlaces de python donde no tendrías alternativas si el enlace no cubriera parte de la API.

Las únicas razones reales para elegir GTK + sobre gtkmm (IMO) son que gtkmm tiene una pequeña sobrecarga adicional ya que es un contenedor en la parte superior de la biblioteca C (pero esto generalmente es solo una llamada a una función, que tendrá impacto insignificante), o si odias o no puedes usar C ++.

Si eres un programador de C #, ¿por qué no le echas un vistazo a Vala ?

Utilizo pygtk para la mayoría de mis aplicaciones GUI de Linux, pero Python simplemente era demasiado lento para el proyecto en el que estoy trabajando en este momento, así que estaba tratando de elegir uno de GTK + y GTKmm. Entonces conocí a Vala.

Es un lenguaje bastante nuevo y, por lo tanto, la documentación es bastante limitada en este momento, pero creo que tiene lo mejor de ambos mundos: sintaxis C # con velocidad C

Como muchos han dicho, Gtkmm le proporciona una buena gestión de memoria, objetos contados de referencia, etc. Sin embargo, se cae en un departamento. Documentación. Todo el proyecto Gtkmm sufre de la "indocumentación". fenómenos, donde la documentación publicada (y publicada en sitios de terceros) es simplemente un escaneo javadoc de los archivos de encabezado.

Solo quería que supieras en lo que te estarías metiendo. Por ejemplo, el Scrolled Window es una de las clases mejor documentadas en Gtk en una de las mejores ventanas documentadas .

¿Has mirado QT?
Es agradable diseño C ++, multiplataforma y LGPL

¡Creo que la mejor manera de hacerlo sería aprender primero gtkmm! Una vez que haya terminado con los conceptos básicos de gtkmm, GTK + debería ser bastante sencillo de aprender (siempre que conozca C y se sienta cómodo con los punteros).

En caso de que no conozca C, puede aprenderlo rápidamente leyendo El lenguaje de programación C de Dennis Ritchie

Le recomiendo que aprenda gtkmm primero porque está especialmente diseñado para C ++, que es algo similar a C # ya que ambos están orientados a objetos, por lo que gtkmm será relativamente fácil de aprender primero que GTK +.

Después de gtkmm, puede pasar a GTK +

¡La mayoría de las compañías de código abierto usan GTK + en lugar de gtkmm, por lo que vale la pena aprender GTK +!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top