¿Qué debo elegir: GTK + o Qt? [cerrado]

89

¿Alguien puede sugerir cuáles son los mejores usos para esas bibliotecas en la actualidad? ¿Es solo GUI, o también tienen soporte para bases de datos, XML, redes, subprocesos, etc.?

Estaba leyendo sobre ellos y consideré comenzar a aprender / usar uno de ellos.

¿Cuál es el más común? ¿Cual es la diferencia entre ellos? ¿Por qué elegirías uno sobre el otro?

Idan
fuente
20
Originalmente, había mucha controversia sobre el modelo de licencia Qt que era GPL completo o comercial, mientras que GTK + era LGPL (por lo que este último era más fácil de usar en combinación con su producto de código cerrado). Pero ahora Qt también está disponible como LGPL IIRC, por lo que esa ya no es una razón real para elegir uno u otro.
Roalt
3
También puede mirar esta pregunta principalmente relacionada: stackoverflow.com/questions/1801074/…
Caleb Huitt - cjhuitt
4
Y nuevamente una buena pregunta cerrada sobre stackoverflow. Quiero agregar que si necesita un buen widget HTML integrado, debe usar GTK ahora (después de que QT 5.2 se moviera a un conjunto de funciones reducido dramáticamente / inutilizable) o usar QT e incrustar Chrome CEF, que agrega muchas cosas, complicaciones y 20 MB a su aplicación.
Lothar

Respuestas:

95

Como parece que se dirige principalmente a Linux, la elección depende principalmente del lenguaje de programación que desee utilizar.

Si codifica en C, obviamente elija GTK +

Si codifica en C ++, elija Qt; de lo contrario, necesitará Gtkmm (un contenedor de C ++ sobre GTK +)

Si codifica en Python, tanto GTK + como Qt tienen enlaces para el lenguaje: consulte PyGtk , PyQt y PySide (el que lanzó Nokia).

Si codifica en Java, Qt ya no es una opción viable en mi humilde opinión, ya que Nokia descontinuó Qt Jambi (los enlaces de Java para Qt).

Además, Qt es más de primera categoría con respecto a su API QGraphicsScene de escena gráfica , su motor de scripting construido sobre Javascript Core (el motor que impulsa WebKit), su máquina de estado y marco de animaciones, y la interfaz de usuario declarativa .

GTK + no ofrece mucho, aunque puede usar Clutter junto con él.

Si está buscando específicamente en DB, XML (GTK + tiene un analizador para un subconjunto de XML) y funciones de subprocesamiento (GTK + tiene GLib ), Qt ofrecerá todo eso en QtSql , QtXml y QtConcurrent .

Con todo, diría que Qt es una elección segura. Pero GTK + también es muy capaz.

No estoy seguro de que obtenga una respuesta clara a su pregunta, lo que explica por qué algunas personas siguen prefiriendo Gnome sobre KDE o viceversa. Elija lo que funcione mejor para usted.

PD: También planeas apuntar a Symbian, luego ir a Qt.

EDITAR: Algo que también es genial con Qt es QtWebView: trae Chromium a su aplicación Qt para mostrar contenido web. Otros están incorporando contenido web en su aplicación utilizando, por ejemplo, Awesomium o Berkelium.

Gregory Pakosz
fuente
No olvide que QtScript funciona con JavaScriptCore, que actualmente es el motor de JavaScript más rápido gracias a SquirrelFish Extreme.
CMircea
1
Con respecto a su edición, existe WebKitGtk + para GTK +. A menos que uno sea sustancialmente más maduro que el otro, no creo que la existencia de QtWebKit califique como una ventaja sobre GTK +.
Mateo
Si codifica en Ruby, busque QtRuby .
José Andias
5
gtkmmes genial, todo el poder de GTK + pero usando C ++ real según la definición moderna, produciendo el código GUI más limpio y legible que he visto ... en realidad, el más soportable , porque cuando empecé a intentar aprender programación GUI, fue la pulcritud lo gtkmmque restauró mi voluntad de vivir. Afortunadamente, la perseverancia dio sus frutos y descubrí que es extremadamente poderoso y me animó a entrar más en C ++ 14 que en C ++ 03. Además, está bien mantenido, por el mismo mantenedor principal durante más de una década AFAICT. Sólo soy un ventilador, sin afiliación, etc.
underscore_d
3
Oh ... los días de Symbian ...
daka
42

He usado GTK +, QT y wxWidgets antes. He aquí un breve resumen:

Para mi primer proyecto de interfaz de usuario multiplataforma, decidí optar por wxWidgets principalmente porque en ese momento la licencia no era tan restrictiva como la de QT (QT era GPL y solo para Linux) y tenía una interfaz de usuario específica de la plataforma (a diferencia de GTK). El proyecto funcionó bien, pero hubo bastantes problemas técnicos para que se compilara y ejecutara correctamente en otras plataformas; a veces, algunos eventos se activaban de manera diferente y cosas así. También GDI en wxWidgets fue bastante lento.

Luego usé GTK para un proyecto diferente en Python. Para esto utilicé los enlaces de Python y todo funcionó más o menos sin problemas. No me gustó mucho el hecho de que la interfaz de usuario no se veía nativa en Windows y Mac y además, cuando inicia una aplicación GTK +, siempre depura las salidas de advertencias CRÍTICAS que parecen estar bien para ignorar. : S

Finalmente, hice un proyecto QT muy simple ahora que Nokia lo adquirió y fue brillante. El mejor de los tres. En primer lugar, si no eres un estudiante de la vieja escuela que prefiere VI o Emacs, QtCreator es brillante. Realmente amo VI y lo usé durante años, pero prefiero QtCreator para proyectos C ++ QT. En cuanto a la biblioteca, también me gustó mucho la documentación y las API proporcionadas. QT tiene un concepto de ranuras y señales que introducen nuevas palabras clave C ++ y un preprocesador. Básicamente, después de leer un tutorial, lo obtendrá fácilmente y comenzará a amarlo. Ahora estoy haciendo desarrollo de iPhone y se siente un poco como el paradigma de interfaz de usuario de Cocoa / Interface Builder.

Resumen: iría por QT sin duda. La licencia es bastante buena y el SDK y la documentación son muy buenos.

rui
fuente
13
Considero positivo que las aplicaciones GTK + tengan el mismo aspecto en diferentes plataformas, ya que significa que no tengo que pasar semanas adicionales averiguando cómo hacer que mis UI se organicen exactamente de la manera correcta con cada kit de herramientas nativo. Además, when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :Sno, no es así, a menos que estés haciendo algo mal, lo cual no está bien. Nunca he visto una advertencia crítica que no provenga de un error propio y no fue extremadamente fácil de solucionar usando el código correcto. Y consigo no hay mensajes de depuración, ni siquiera las advertencias
underscore_d
25

Nunca he usado GTK, pero según mi experiencia personal con Qt:

Es mucho más que una simple GUI. Es un marco de aplicación completo. Solía ​​pensar en ello como las bibliotecas de Java para C ++. Proporciona todo lo que menciona: base de datos, XML, redes y subprocesos, y más. También proporciona elementos como contenedores e iteradores, y equivalentes a varias bibliotecas de impulso.

Lo que más me impresionó al comenzar a usar Qt fue la documentación extremadamente extensa. Obtiene un programa llamado Qt Assistant, que proporciona documentación API completamente indexada y con capacidad de búsqueda en su escritorio, así como numerosos ejemplos de código y tutoriales. Descubrí que marcaba una gran diferencia al buscar en la web cada vez información de API. Acceso muy rápido cuando necesita recordar la firma de un método.

No estoy seguro de cuál es la más común; probablemente sea difícil de medir con precisión. Ciertamente, ambos son populares. Como Gnome es el escritorio predeterminado de Ubuntu y Gnome se encuentra en la parte superior de GTK, obviamente tiene un uso generalizado. Por supuesto, KDE también es muy popular. Nokia está impulsando fuertemente Qt en el espacio móvil: su sistema operativo Maemo, utilizado en el nuevo N900, por ejemplo, pronto cambiará a Qt como el kit de herramientas predeterminado (actualmente es GTK). Creo que Qt también se convertirá pronto en el kit de herramientas predeterminado. para el sistema operativo Symbian.

No he usado Qt Creator, pero he escuchado muchas cosas buenas sobre él. Es un IDE de C ++ con una fuerte integración obvia con Qt. ¡También tiene una emulación vim falsa que siempre es buena si te gustan ese tipo de cosas!

Qt usa qmake para la configuración de compilación. Encontré esto mucho mejor que tener que escribir tus propios archivos MAKE. No sé qué utiliza GTK para la construcción.

Un par de cosas que encontré un poco desagradables con Qt al principio fueron sus grandes usos de las macros de preprocesador. El sistema de señales / ranuras proporciona un buen mecanismo para el paso de eventos / mensajes en su aplicación, pero se siente un poco como magia que puede no ser fácilmente transferible a otro juego de herramientas si alguna vez lo desea. Además, el moc (compilador de metaobjetos), aunque no estoy del todo seguro de lo que hace, también se parece demasiado a la magia que ocurre detrás de escena.

Sin embargo, en general, recomendaría Qt, especialmente si está aprendiendo. Tiene una documentación realmente asombrosa y un buen IDE, y foros ocupados. Podrá crear aplicaciones C ++ muy rápidamente con él, particularmente con QML que viene en 4.7.

ngm
fuente
9

Probablemente dependa de lo que quieras hacer. Recomendaría Qt, porque es más que GUI, tiene buenos enlaces de Python (también los tiene Gtk), y las bibliotecas de GUI son (subjetivamente hablando) más agradables que Gtk.

Por otro lado, Gtk es más común en el mundo de Linux, por lo que probablemente pueda obtener más ayuda en la web. La razón de la generalización de Gtk probablemente tenga más que ver con Gnome y Ubuntu, en lugar de méritos técnicos, pero si desea que su software se mezcle bien con esos dos, lo logrará más fácilmente con Gtk.

Slartibartfast
fuente
7

Qt seguro que tiene una base de datos sólida, red, soporte para subprocesos, etc. Hace mucho más que una GUI multiplataforma (y hace la mayor parte bastante bien).

Lo recomendaría sobre GTK +.

Cristóbal
fuente
3

Simplemente agregando ventajas de QT a otras respuestas ... QT tiene una gran documentación, su propio creador de IDE y GUI y mejora C ++ con algunos conceptos nuevos como ranuras / señales (básicamente eventos).

No soy un desarrollador de GTK, por lo que no puedo compararlos con el mundo GTK :(

Gregor Petrin
fuente
11
Para Gtk, también existe un creador de GUI Glade ( glade.gnome.org ).
Davidbe
3

Qt. No solo está orientado a objetos, es "bueno" orientado a objetos. Está basado en un "subconjunto" de C ++ que no depende de la oscuridad de C ++ (pero puedes seguir con ellos, si te apetece el masoquismo;)).

Tiene un fuerte impulso ahora que Nokia lo compró (en realidad, Nokia lo hizo hace ~ 2/3 años). Estará en todos los dispositivos móviles de Nokia E Intel (teléfonos inteligentes, netbooks, tabletas).

Es la columna vertebral de KDE, por lo que es muy maduro, pero está diseñado de una manera muy flexible, lo que hace posible admitir HOY todas las últimas "cosas interesantes" que debería tener un marco de trabajo más que solo GUI .

Ve a por ello.

Detro
fuente
5
¿Subconjunto? Más como un superconjunto, considerando qmake y moc.
rr-
1

También parece que Nokia está a punto de usar Qt en todas partes, como en Maemo.

jlru
fuente
1

Si desea que su aplicación se ejecute en iOS, Android, Blackberry, otras plataformas móviles, Windows, Mac OSX y Linux, use Qt.

qt-project.org

trusktr
fuente