2009-11-26 20 views
15

Mucha gente parece tener una opinión sobre cuál es mejor. Realmente no estoy pidiendo estas opiniones, lo que me gustaría saber son los detalles: ¿Cuáles son las cosas que hacen que un juego de herramientas gráficas sea diferente de otro, y cuáles de estas diferencias tienen Qt y Gtk +?¿Cuáles son las diferencias entre Gtk + y Qt?

Respuesta

20

No puedo hablar directamente con Gtk +, pero en mi trabajo anterior utilicé Gtkmm, y en mi trabajo actual uso Qt. Ambos son C++, por lo tanto, en ese sentido son consistentes, pero Gtkmm es/fue solo un contenedor del código Gtk +, que está en línea C.

En el momento en que cambié de trabajo, recuerdo que una de las principales diferencias en el código Ui se explicaba cómo los dos kits de herramientas manejaban los diseños. En algunas partes pensé que Gtk lo hizo mejor, y pensé que a Qt le iba mejor. Ambos te permiten obtener tus widgets donde los desees, eventualmente.

La depuración con Gtkmm fue un poco molesta, porque las clases generalmente no hacían nada excepto mantener un puntero a una estructura y llamar a funciones Gtk +. Ese nivel extra de indirección podría ser molesto.

Qt tiene más código auxiliar que puede ser útil en varias configuraciones, al menos en comparación con la versión de Gtkmm que estaba usando. Las cosas para facilitar el enhebrado, la comunicación entre procesos y la creación de redes son más fáciles de apreciar cuando necesita agregar una nueva dimensión a su programa. También tienen sus contenedores, si quieres usarlos, que creo que tienen una interfaz más sana que los contenedores STL, pero al final hacen lo mismo, así que es una pequeña ventaja.

El mecanismo de señal/ranura entre Gtkmm y Qt es diferente. Qt se basa en un paso adicional en el proceso de compilación para generar metainformación, que utiliza para su señal/ranuras. Un objeto que utiliza señales o ranuras debe heredar de un QObject, y la herencia de QObject debe ser la primera, sin estructura de diamante. Esto hace que sea difícil definir una interfaz abstracta que emita una señal, por ejemplo. En el lado positivo, son inherentemente conscientes de los problemas de enhebrado y convertirán la conexión de señal/ranura en una conexión basada en eventos cuando sea necesario. Gtkmm usa señales SigC, que son simples clases de C++, y para mí parecen ser útiles en una variedad más amplia de situaciones. Además, solo recuerdo que los objetos que hacen una conexión deben heredar de la clase base mágica. Además, dado que las máquinas tragamonedas son objetos, también puede usarlos como objetos funtores adaptables muy agradables.

Estoy seguro de que hay otras diferencias, pero eso es lo que recuerdo ahora. Tenga en cuenta que mi última experiencia con Gtkmm fue hace unos 3 años, por lo que algunos de estos elementos pueden haber cambiado por ahora.

5

En primer lugar, puede usar Gtk + de C. Qt solo en C++.

Además, las aplicaciones Gtk + tienden a tener diálogos que cambian persistentemente, con un botón de cerrar. Qt tiende a estar en las líneas de Ok/Aplicar/Cancelar. Sin embargo, no sé cuánto de esto se aplica al nivel de herramientas.

En cuanto a la programación, no sé qué mecanismo de devolución de llamada utiliza Gtk, pero el mecanismo de ranuras de señales de Qt oscila absolutamente.

+0

He oído eso antes (que Qt es solo C++), pero realmente no entiendo lo que significa. Puedo usar Gtk + en C#, python, etc. Sé que puedes usar Qt en al menos Python. ¿Qué significa que Qt es solo C++? –

+2

@Matthew: simplemente significa que no puede usarlo con C. Sin embargo, puede hacer enlaces a cualquier lenguaje de nivel superior (Python, Ruby, lo que sea). –

+5

El "guardado de configuraciones automáticas" versus "Aceptar, Aplicar, Cancelar" es realmente más una cosa de Gnomo que de KDE. Ambos kits de herramientas pueden manejar cualquiera de los dos. –

13

Para entender las diferencias, es mejor comprender la historia.

QT se desarrolló como una interfaz de usuario y tenía algunos problemas de licencia al principio cuando KDE comenzó a desarrollarse por primera vez. KDE eligió QT ya que no había mucha selección en aquel momento (Motif, Tcl/Tk por nombrar algunos)

El GIMP estaba comenzando a desarrollarse y en ese momento los Toolkits de Window no estaban a la altura de lo que los desarrolladores necesitaban, así que comenzaron a escribir el Kit de herramientas de Gimp (GTK). Después de algún tiempo, se decidió volver a escribir GTK y convertirlo en Objeto orientado (GTK +).

También en esta época, debido a los posibles problemas de licencia con QT, se inició Gnome y se decidió utilizar la biblioteca GTK +.

Ahora, si nos fijamos en las entradas QT Design y GTK Design en Wikipedia, puede comenzar a ver algunas de las diferencias entre los sistemas.

en cuenta que una de QT se conoce como:

multiplataforma marco de desarrollo de aplicaciones

mientras GTK + se denomina:

multiplataforma Widget Toolkit para crear interfaces gráficas de usuario.

Si estas entradas son creíbles, entonces creo que esa es la diferencia principal entre las dos, pero diría que es una línea bastante fina en el mundo de hoy.

+3

Eso no es realmente una diferencia. Simplemente significa que GTK hace las cosas básicas con bibliotecas separadas (glib, GObject, etc.), mientras que Qt tiene todo en QtCore. Una comparación más cercana sería QtGui vs. GTK. –

+3

Otro problema histórico, cuando se analizan las capacidades multiplataforma, es que esto se tuvo en cuenta desde la primera línea fuente de Qt, donde -como GTK se diseñó como un conjunto de herramientas X11 desde el principio y luego se ha extendido a algo como plataforma cruzada más adelante. Tener múltiples libs para diferentes cosas realmente puede hacer que cross platform sea un hazzle, ¿por qué Qt es mi elección preferida aquí? – e8johan

Cuestiones relacionadas