linux qt_qpa_platformtheme - ¿Qué debería elegir:GTK+o Qt?




qtcurve archlinux (9)

¿Puede alguien sugerir cuáles son los mejores usos para esas bibliotecas hoy? ¿Es solo GUI, o tienen soporte para bases de datos, XML, redes, hilos, 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?


Answers

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

Es mucho, mucho más que simplemente GUI. Es un marco de aplicación completo. Solía ​​pensar en él 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 cosas como contenedores e iteradores, y contrapartes a varias bibliotecas de impulso.

Lo que más me impresionó cuando comencé a usar Qt fue la documentación extremadamente extensa. Obtiene un programa llamado Qt Assistant, que proporciona documentación 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 necesitas recordar la firma de un método.

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

No he usado Qt Creator, pero he escuchado muchas cosas buenas al respecto. Es un IDE de C ++ con evidente integración pesada con Qt. También tiene una emulación de vim falsa 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é lo que GTK usa para construir.

Un par de cosas que encontré un poco desacreditado con Qt al principio fue su gran uso 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 una magia que puede no ser fácilmente transferible a otro juego de herramientas si alguna vez lo desea. También el moc (compilador de metaobjetos), aunque no estoy del todo seguro de lo que hace, también se parece demasiado a la magia detrás de las escenas.

Sin embargo, en general, recomendaría Qt, especialmente si estás aprendiendo. Tiene una documentación realmente increíble y un IDE agradable, y foros ocupados. Podrás construir aplicaciones C ++ muy rápidamente con él, particularmente con el QML en 4.7.


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

Tiene un fuerte impulso ahora que Nokia lo compró (en realidad, Nokia lo hizo ~ 2/3 años atrás). 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, que hace posible que TODAY sea compatible con todas las últimas "cosas interesantes" que debería tener un marco de GUI más que suficiente.

Ve a por ello.


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


Probablemente depende de lo que quieras hacer. Recomendaría Qt, porque es más que GUI, tiene bonitos enlaces de Python (también lo hace Gtk), y las propias bibliotecas de GUI 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 tiene más que ver con Gnome y Ubuntu, que con los méritos técnicos, pero si quieres que tu software se mezcle bien con esos dos, lo lograrás más fácilmente con Gtk.


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

Para mi primer proyecto de UI multiplataforma decidí optar por wxWidgets principalmente porque en ese momento la licencia no era tan restrictiva como 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 para compilarlo y ejecutarlo correctamente en otras plataformas: a veces algunos eventos se activaban de forma diferente y tal. También GDI en wxWidgets fue bastante lento.

Luego utilicé GTK para un proyecto diferente en Python. Para esto utilicé las ataduras de pitón y todo funcionó más o menos suavemente. No me gustó el hecho de que la interfaz de usuario no pareciera nativa en Windows y Mac, y también cuando se ejecuta una aplicación GTK + siempre se depuran cargas de advertencias CRÍTICAS que parecen bien ignorar. : S

Finalmente, hice un proyecto de QT muy simple ahora que Nokia lo adquirió y fue brillante. Lo mejor de los tres. En primer lugar, si no eres un antiguo alumno que prefiere VI o Emacs, QtCreator es brillante. Realmente me encanta VI y lo utilicé durante años, pero prefiero mucho 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 slots 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 encantarlo. Ahora estoy haciendo el desarrollo de iPhone y se siente un poco como el paradigma de IU de Cocoa / Interface Builder.

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


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, 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: vea PyGtk , PyQt y PySide (el lanzado por Nokia).

Si codifica en Java, Qt ya no es una opción viable ya que Nokia suspendió Qt Jambi (las vinculaciones de Java para Qt).

Además, Qt es más de primera categoría en cuanto a su scenegraph QGraphicsScene API, 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 puedes usar Clutter junto con él.

Si está buscando específicamente las funciones DB, XML (GTK + tiene un analizador sintáctico para un subconjunto de XML) y de subprocesamiento (GTK + tiene GLib ), entonces 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 para su pregunta, lo que explica por qué algunas personas siguen prefiriendo Gnome a KDE o viceversa. Elija lo que funciona mejor para usted.

PD: planeo apuntar a Symbian, luego ir a Qt.

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


Simplemente agregando las 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 tragamonedas / señales (básicamente, eventos).

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


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


Puede usar Qemu para evaluar tareas rápidamente. Este procedimiento a continuación toma menos de 5 segundos en mi computadora portátil de 5 años.

Supongamos que el alumno tiene que desarrollar un programa que tome ints sin firmar, cada uno en su propia línea, hasta que llegue una línea con "-1". El programa debe promediar todas las entradas y la salida "Promedio:% f". Así es como podría probar el programa completamente aislado:

  1. Primero, obtenga root.bin de Jslinux, lo usaremos como el dominio de usuario (tiene el compilador C tcc):

    wget https://github.com/levskaya/jslinux-deobfuscated/raw/master/root.bin

  2. Queremos incluir el envío del estudiante en root.bin , así que configure el dispositivo de bucle:

    sudo losetup /dev/loop0 root.bin

    (También puedes usar fuseext2 para esto, pero no es muy estable. Si se estabiliza, no necesitarás root para nada de esto)

  3. Haz un directorio vacío:

    mkdir mountpoint

  4. Monte root.bin :

    sudo mount /dev/loop0 mountpoint

  5. Ingrese el sistema de archivos montado:

    cd mountpoint

  6. Arreglar derechos:

    sudo chown -R `whoami` .

  7. mkdir -p etc/init.d
  8. vi etc/init.d :

    #!/bin/sh
    cd /root
    echo READY 2>&1 > /dev/ttyS0
    tcc assignment.c 2>&1 > /dev/ttyS0
    ./a.out 2>&1 > /dev/ttyS0
    
  9. chmod +x etc/init.d/rcS

  10. Copie el envío a la VM:

    cp ~/student_assignment.c root/assignment.c

  11. Salga de la raíz FS de la VM:

    cd ..

  12. sudo umount mountpoint
  13. Ahora que la imagen está lista, solo necesitamos ejecutarla. Compilará y ejecutará el envío después del arranque.
  14. mkfifo /tmp/guest_output
  15. Abra una terminal separada y comience a escuchar la salida de los invitados:

    dd if=/tmp/guest_output bs=1

  16. En otra terminal:

    qemu-system-i386 -kernel vmlinuz-3.5.0-27-generic -initrd root.bin -monitor stdio -nographic -serial pipe:/tmp/guestoutput (Acabo de usar el núcleo de Ubuntu aquí, pero muchos núcleos funcionarán)

  17. Cuando la salida de invitado muestra "LISTA", puede enviar claves a la máquina virtual desde el indicador qemu. Por ejemplo, para probar esta tarea, podrías hacer

    (qemu) sendkey 1
    (qemu) sendkey 4
    (qemu) sendkey ret
    (qemu) sendkey 1
    (qemu) sendkey 0
    (qemu) sendkey ret
    (qemu) sendkey minus
    (qemu) sendkey 1
    (qemu) sendkey ret
    
  18. Ahora Average = 12.000000 debería aparecer en la tubería de salida de invitado. Si no es así, el estudiante falló.

  19. Salir de qemu: quit

Un programa que pasa la prueba está aquí: https://.com/a/14424295/309483 . Simplemente use tcclib.h lugar de stdio.h .





linux qt gtk