c++ c linux native

c++ - gtk+ 3.18 9



¿Cómo se hace la GUI de Linux? (11)

Mi experiencia principal es con C && C ++, por lo que preferiría quedarme con ellos. No quiero utilizar nada como QT, GTK o wxWidgets ni ningún kit de herramientas. Me gustaría aprender programación nativa y este tipo de derrotas el propósito. Con eso en mente, también me gustaría evitar Java.

Entiendo gnome, xfce y KDE, y todos son entornos de escritorio para Linux, y la base instalada suele ser X (Xorg). Al codificar para Linux, ¿codifica X o el entorno de escritorio? ¿Hay un encabezado Linux estándar para esto (como win32 tiene windows.h) para Linux? o son diferentes los métodos de codificación para cada entorno de escritorio?

Cualquier ayuda es muy apreciada.


GTK, QT y wx son kits de herramientas que se basan en X para proporcionar una API más amigable.

Si no usa un juego de herramientas existente, tendrá que escribir cosas a un nivel muy bajo, manejando directamente los eventos del mouse y del teclado. Si desea un botón o un cuadro de texto, tendrá que escribirlo usted mismo utilizando las primitivas xlib de bajo nivel.

Antes de intentar esto, probablemente sea mejor elegir el kit de herramientas de su entorno de escritorio preferido y comenzar con eso.


La interfaz "nativa" para Linux y la mayoría de otros sistemas operativos similares a Unix es Xlib, la API C de nivel más bajo para X11.

GTK, Qt y otros son todos (hasta donde yo sé) implementados en términos de Xlib en su núcleo. Como han dicho otros, Xlib te brinda el control máximo, pero tendrás que trabajar para ello (y otros pueden correr círculos a tu alrededor en términos de entrega de un producto).

Como punto de referencia, implementé personalmente una biblioteca de GUI multiplataforma (Win32 + X11), bastante funcional y moderna (es decir, fluida) en C ++. El recuento total es de aproximadamente 29 KLOC de C ++, de los cuales se necesitaron alrededor de 2500 líneas cada uno para el ajuste X11 y Win32. El resto es para implementaciones de Widget de plataforma neutra. A menos que esté preparado para comprometerse así, le recomiendo que vaya con una de las bibliotecas de nivel superior (Qt probablemente sea mi elección, aunque no puedo soportar el enfoque de preprocesador).

Por cierto, una gran ventaja para Xlib es su portabilidad bruta: cualquier caja de Unix con una pantalla lo tendrá, y también puede funcionar en Windows y OS X.


Simplemente no hay tal cosa como "nativo" en este caso. Windows y OS X solo tienen una opción oficial, mientras que X no.


Supongo que podría escribir código C directamente contra Xlib , pero terminaría recreando toda la funcionalidad que proporciona GTK + o QT que X no está sola.


Unix (y, por extensión, Linux) en realidad no define nada que ver con las GUI. X, que se usa comúnmente, no define nada que tenga que ver con widgets o estilos ni nada de esa naturaleza; se trata principalmente de primitivas de dibujo y manejo de eventos. Básicamente, si quisiera escribir en X puro, estaría definiendo la forma y el comportamiento de cada elemento en la pantalla. Si estuvieras lo suficientemente loco como para abandonar X, estarías trabajando en el nivel de framebuffer de gráficos ...

Es mejor que uses un juego de herramientas. Si estás buscando poco peso, ¿por qué no pruebas FLTK ?


Yo sugeriría lesstif / motivo también. También se basa en X y la curva de aprendizaje es, en mi opinión, no tan pronunciada como GTK o Qt. Sin embargo, las UI que construyas con ellas no serán tan sofisticadas como las que podrías construir con GTK o Qt. Más información se puede encontrar aquí .

Como otros han mencionado, probablemente no quieras X es un dolor.


No quiero utilizar nada como QT, GTK o wxWidgets ni ningún kit de herramientas. Me gustaría aprender programación nativa y este tipo de derrotas el propósito.

No, no lo haces. De vuelta en una versión anterior de X11, como R1 o R2, codifiqué un programa completo de "Hello, World" solo en Xlib.

Aproximadamente 700 líneas de C.

No quieres ir allí.


X es una capa horrible para programar y, a pesar de tu intención de evitar Java, QT o cualquiera de las excelentes capas de abstracción de la interfaz de usuario, te harás un flaco favor al codificar a ese nivel. Lo hice (hace mucho tiempo cuando Motif estaba en su infancia en la plataforma que estábamos usando) y no volvería a hacerlo si hubiera una manera más fácil.

Tu uso de la frase "programación nativa" me confunde un poco. Si desea aprender programación nativa, es a las API a las que elige llamar. Con un razonamiento similar, tampoco debería codificar en C, sino que debe optar por el ensamblador (o el código de máquina directo) ya que C proporciona una abstracción al hardware.

Si quieres aprender la programación X, está bien. Obtendrá mucho más control sobre su interfaz, pero casi todos los demás le rendirán en términos de entrega de software. Yo prefiero codificar a una API de nivel superior que puedo usar en muchas plataformas, me da tiempos de entrega más rápidos y más potencial de mercado.

No construyes una casa con átomos, la construyes con ladrillos. Mi sugerencia es usar las herramientas, para eso están ahí.


¿Por qué no elegir uno entre, por ejemplo, Qt, wxWidgets y GTK y conocer sus aspectos internos, en lugar de su API? No me refiero solo por el hecho de hacerlo, sino con el objetivo de contribuir a las partes que le resulten más atractivas. De esta forma, cumplirías tu objetivo y harías algo útil, para ti y también para los demás. Creo que esto sería más gratificante que asignarte la tarea más bien artificial de construir una aplicación con lo que equivalen a las herramientas equivocadas.


Creo que es necesario contraponer la unanimidad de las otras respuestas aquí. X11 es de hecho bajo nivel. Pero para "realmente" entender lo que está pasando, debería estar un poco familiarizado con el funcionamiento de X11. Dado que todos los kits de herramientas funcionan en la parte superior de X, lo está usando, le guste o no. Hay un buen tutorial en línea en algún lugar que soy demasiado flojo para buscar. Lo guía a través de la construcción de un simple Hello World. Para hacerlo, tendrás que aprender a crear una ventana, solicitar eventos, mapear la ventana y procesar eventos en un bucle. Incluso podría llegar a ordenar algunos libros usados ​​en Amazon. Los O''Reilly vols 1 y 2 (por ahora obtienen las ediciones más baratas, pero nada antes que X11R4) son esenciales para referencia y para obtener la historia completa de cómo funcionan las piezas juntas. Para aprender, sin embargo, el mejor libro es X Window Applications Programming por Eric Johnson y Kevin Reichard.

En algún momento de este viaje, como todos los demás dicen, verás que ya has tenido suficiente. Dos páginas de código solo para seleccionar una imagen, y luego todavía debe rellenar un mapa de colores antes de poder pintar su mapa de bits personalizado. Y luego dos días de reescritura y depuración para darse cuenta de que todo funciona; ¡simplemente te olvidaste de XFlush() !

La lucha es importante, porque apreciarás más los kits de herramientas una vez que encuentres el que más te guste.