Pregunta

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 kit de herramientas gráficas sea diferente de otro, y cuáles de estas diferencias tienen Qt y Gtk +?

¿Fue útil?

Solución

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

En el momento en que cambié de trabajo, recuerdo que una de las principales diferencias en el código de la interfaz de usuario era cómo los dos kits de herramientas manejaban los diseños. Algunas partes pensé que Gtk lo hizo mejor, algunas pensé que Qt lo hizo mejor. Ambos te permiten llevar tus widgets a donde quieras, eventualmente.

La depuración con Gtkmm fue un poco difícil, porque las clases generalmente no hacían nada excepto mantener un puntero a una estructura y llamar a las funciones Gtk +. Ese nivel adicional 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 apreciadas 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 segura que los contenedores STL, pero al final hacen lo mismo, por lo que es una ligera 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 usa señales o ranuras debe heredar de un QObject, y la herencia de QObject debe ser la primera, sin estructura de diamante. Esto dificulta la definición de una interfaz abstracta que emite una señal, por ejemplo. En el lado positivo, son inherentemente conscientes de los problemas de subprocesos 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 clases directas de C ++, y me parecen útiles en una variedad más amplia de situaciones. Además, según recuerdo, solo los objetos que se conectan deben heredarse de la clase base mágica. Además, dado que las ranuras son objetos, también puede usarlas como objetos de función 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 esos elementos pueden haber cambiado ahora.

Otros consejos

Para comprender las diferencias, es mejor comprender la historia.

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

El GIMP comenzaba a desarrollarse y en ese momento los Toolkits de Windows no estaban a la altura de lo que los desarrolladores necesitaban, por lo que comenzaron a escribir el Kit de herramientas Gimp (GTK). Después de un tiempo, se decidió volver a escribir GTK y hacerlo Orientado a Objetos (GTK +).

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

Ahora, si mira el QT Design y el entradas de diseño GTK en Wikipedia, puede comenzar a ver algunas de las diferencias entre los sistemas.

Observe que QT se conoce como:

  

marco de desarrollo de aplicaciones multiplataforma

mientras que GTK + se conoce como:

  

kit de herramientas de widgets multiplataforma para crear interfaces gráficas de usuario.

Si hay que creer en estas entradas, creo que eso es lo que podríamos hacer las principales diferencias entre los dos, pero diría que es una línea bastante fina en el mundo de hoy.

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

Además, las aplicaciones Gtk + tienden a tener diálogos que cambian constantemente, con un botón de cierre. Qt tiende a estar en la línea de Ok / Apply / Cancel. Sin embargo, no sé cuánto de esto se aplica a nivel de kit 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 es absolutamente genial.

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