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


¿Puede alguien sugerir cuáles son los mejores usos para esas bibliotecas hoy en día? ¿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? ¿Cuál es la diferencia entre ellos? ¿Por qué elegirías uno sobre el otro?

 74
Author: unwind, 2009-12-11

9 answers

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

Si codifica en C, entonces obviamente vaya por GTK +

Si codifica en C++, vaya a 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: ver PyGTK, PyQt y PySide (el lanzado por los propios Nokia).

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

También, Qt es más de primera categoría con respecto a su scenegraph QGraphicsScene API, su motor de scripting construido sobre Javascript Core (el motor que alimenta 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ás específicamente buscando en DB, XML (GTK + tiene un analizador para un subconjunto de XML) y threading (GTK + tiene GLib ) características entonces Qt ofrecerá todo eso en QtSql, QtXml y QtConcurrent.

En general, yo diría que Qt es una opción segura. Pero GTK + también es muy capaz.

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

PD: Si planeas apuntar también a Symbian, entonces ve por Qt.

EDIT: Algo que también es genial con Qt es QtWebKit: trae WebKit a su aplicación Qt. Otros están incrustando WebKit en su aplicación utilizando, por ejemplo, Awesomium o Berkelium.

 80
Author: Gregory Pakosz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-03 15:39:43

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

Para mi primer proyecto de interfaz de usuario multiplataforma decidí ir 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 interfaz de usuario específica de la plataforma (a diferencia de GTK). El proyecto funcionó bien, pero hubo bastantes fallos para compilarlo y ejecutarlo correctamente en otras plataformas, a veces algunos eventos se activaron de manera diferente y cosas así. También GDI en wxWidgets era 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 suavemente. No me gustó mucho el hecho de que la interfaz de usuario no se veía nativa en Windows y Mac y también cuando se inicia una aplicación GTK+ siempre depura las salidas de cargas de advertencias CRÍTICAS que parecen bien para ignorar. : S

Finalmente, hice un proyecto QT muy simple ahora que Nokia lo ha adquirido y fue brillante. El mejor de los tres. En primer lugar, si no eres un viejo colegial que prefiere VI o Emacs, QtCreator es brillante. Realmente amo VI y lo usé durante años, pero prefiero QtCreator para proyectos QT de C++. 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 de C++ y un preprocesador. Básicamente, después de leer un tutorial lo obtendrá fácilmente y comenzará a amarlo. Ahora estoy haciendo iPhone dev y se siente un poco como Cocoa / Interfaz Builder's UI paradigm.

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

 35
Author: rui,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-02 14:04:25

Nunca he usado GTK, pero desde mi experiencia personal usando Qt:

Es mucho, mucho más que simplemente GUI. Es todo un marco de aplicación. Solía pensar en ello como las bibliotecas Java para C++. Proporciona todo lo que mencionas: base de datos, XML, redes y subprocesos, y más. También proporciona cosas como contenedores e iteradores, y contrapartes para una serie de bibliotecas de boost.

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

No estoy seguro de cuál es el más común; eso es probablemente difícil de medir con precisión. Los dos son muy 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á empujando fuertemente Qt en el espacio móvil their su sistema operativo Maemo, utilizado en el nuevo N900, por ejemplo, pronto cambiará a Qt como kit de herramientas predeterminado (actualmente es GTK. Creo que Qt pronto se convertirá en el kit de herramientas predeterminado para Symbian OS.

No he usado Qt Creator, pero he oído muchas cosas buenas al respecto. Es un IDE de C++ con obvia integración pesada con Qt. Se también tiene falsa emulación vim que siempre es agradable si te gusta ese tipo de cosas!

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

Un par de cosas que encontré un poco fuera de lugar con Qt al principio fueron sus grandes usos de macros de preprocesador. El sistema de señal / 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 sea fácilmente portable a otro kit de herramientas si alguna vez lo desea. También el moc (meta-object compiler), aunque no estoy completamente seguro de lo que hace, también se siente un poco como magia pasando detrás de las escenas.

En general, sin embargo, recomendaría Qt, particularmente si está aprendiendo. Tiene documentación realmente increíble y un IDE agradable, y foros ocupados. Usted será capaz de construir aplicaciones C++ muy rápidamente con él, particularmente con el QML que viene en 4.7.

 21
Author: ngm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-11 12:18:00

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

Gtk es, por otro lado, 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 el software se combine bien con esos dos, lograrás eso más fácilmente con Gtk.

 8
Author: Slartibartfast,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-11 10:25:44

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

Lo recomendaría sobre GTK+.

 7
Author: ChristopheD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-11 10:14:03

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

No soy un desarrollador GTK, así que no puedo compararlos con el mundo GTK: (

 3
Author: Gregor Petrin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-11 11:00:55

Qt. No solo está orientado a objetos, es" bueno " orientado a objetos. Se basa en un "subconjunto" de C++ que no se basa en la oscuridad de C++ (pero se le permite seguir con ellos, si le apetece masoquismo ;) ).

Tiene un fuerte impulso ahora que Nokia lo compró (en realidad Nokia lo hizo hace ~2/3 años). Va a estar en todos los dispositivos móviles 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 manera, que hace posible soportar HOY en DÍA todas las últimas "cosas interesantes" que un más-entonces-sólo-GUI marco debe tener.

Adelante.

 3
Author: Detro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-10 17:58:03

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

 1
Author: jlru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-31 11:03:39

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

 1
Author: trusktr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-07 19:23:46