Как вы делаете графический интерфейс Linux? - PullRequest
23 голосов
/ 12 декабря 2008

Мой основной опыт работы с C && C ++, поэтому я бы предпочел остаться с ними. Я не хочу использовать что-либо вроде QT, GTK или wxWidgets или каких-либо наборов инструментов. Я хотел бы изучить нативное программирование, и этот вид поражает цель. Имея это в виду, я также хотел бы избежать Java.

Я понимаю, что gnome, xfce и KDE - это все среды рабочего стола для Linux, и обычно устанавливается базовая версия X (Xorg). Когда вы пишете код для Linux, вы пишете код для X или для рабочего стола? Есть ли для этого стандартный заголовок Linux (например, win32 имеет windows.h) для Linux? или это разные методы кодирования для каждой среды рабочего стола?

любая помощь очень ценится.

Ответы [ 11 ]

65 голосов
/ 12 декабря 2008

X - отвратительный слой для программирования, и, несмотря на ваше намерение избегать Java, QT или любого из превосходных уровней абстракции пользовательского интерфейса, вы будете оказывать плохую услугу, кодируя до этого уровня. Я сделал это (давным-давно, когда Motif находился в зачаточном состоянии на платформе, которую мы использовали), и я бы не сделал бы это снова, если бы был более простой способ.

Ваше использование фразы "нативное программирование" меня немного смущает. Если вы хотите изучать нативное программирование, вы должны вызывать API-интерфейсы. Используя аналогичные рассуждения, вы также не должны кодировать на C, вместо этого выбирая ассемблер (или прямой машинный код), поскольку C предоставляет абстракцию аппаратному обеспечению.

Если вы хотите научиться программированию на Х, это нормально. Вы получите гораздо больший контроль над своим интерфейсом, но почти все остальные будут опережать вас с точки зрения поставки программного обеспечения. Сам я бы предпочел написать код высокоуровневого API, который я могу использовать на многих платформах - это дает мне как быстрые сроки доставки, так и больший потенциал на рынке.

Вы строите дом не из атомов, вы строите его из кирпича. Я предлагаю использовать инструменты, вот для чего они здесь.

44 голосов
/ 12 декабря 2008

Я не хочу использовать что-либо вроде QT, GTK или wxWidgets или каких-либо наборов инструментов. Я хотел бы изучить нативное программирование, и этот вид поражения цели.

Нет, нет. Еще в ранней версии X11, такой как R1 или R2, я написал полную программу «Hello, world» только на Xlib.

Примерно 700 строк С.

Ты не хочешь туда идти.

13 голосов
/ 12 декабря 2008

Полагаю, вы могли бы написать код на C прямо против Xlib , но в конечном итоге вы воссоздали бы все функциональные возможности, которые GTK + или QT предоставляют, что X не один.

10 голосов
/ 12 декабря 2008

Unix (и, соответственно, Linux) фактически не определяет ничего общего с GUI. X, который обычно используется, не определяет ничего общего с виджетами или стилями или чем-то в этом роде - он в основном касается рисования примитивов и обработки событий. По сути, если бы вы хотели писать в чистом X, вы бы определяли форму и поведение каждого элемента на экране. Если бы вы были достаточно сумасшедшими, чтобы отказаться от X, вы бы работали на уровне графического буфера кадров ...

Вам лучше использовать некоторый инструментарий - если вы ищете легкий вес, почему бы не попробовать FLTK ?

4 голосов
/ 12 декабря 2008

В данном случае просто не существует понятия "родной". Windows и OS X просто имеют официальный параметр, а X - нет.

4 голосов
/ 12 декабря 2008

GTK, QT и wx - это наборы инструментов, которые основаны на X и предоставляют более дружественный API.

Если вы не используете существующий инструментарий, вам придется писать вещи на очень низком уровне - непосредственно обрабатывая события мыши и клавиатуры. Если вам нужна кнопка или текстовое поле, вам придется написать ее самостоятельно, используя низкоуровневые примитивы xlib.

Прежде чем попробовать это, вам, вероятно, лучше выбрать инструментарий предпочитаемой среды рабочего стола и начать с этого.

3 голосов
/ 12 декабря 2008

«Родным» интерфейсом для Linux и большинства других Unix-подобных ОС является Xlib, низкоуровневый C API для X11.

GTK, Qt и другие (насколько я знаю) реализованы в терминах Xlib по своей сути. Как уже говорили другие, Xlib дает вам максимальный контроль, но вам придется работать над этим (а другие могут объезжать вас с точки зрения поставки продукта).

В качестве ориентира я лично реализовал в C ++ довольно многофункциональную и современную (то есть текучую) кросс-платформенную (Win32 + X11) библиотеку GUI. Общее количество составляет около 29 KLOC C ++, из которых около 2500 строк каждая требуется для шиммирования X11 и Win32. Остальное для реализаций Widget, не зависящих от платформы. Если вы не готовы принять такое обязательство, я настоятельно рекомендую использовать одну из библиотек более высокого уровня (Qt, вероятно, был бы моим выбором, хотя я не могу выдержать подход препроцессора).

Кстати, большим плюсом для Xlib является его сырая переносимость - он есть у любого Unix-бокса с экраном, и его также можно настроить для работы в Windows и OS X.

2 голосов
/ 07 августа 2011

Я считаю необходимым противопоставить единодушие других ответов здесь. X11 действительно низкий уровень. Но чтобы «по-настоящему» понять, что происходит, вы должны иметь некоторое представление о том, как работает X11. Поскольку все наборы инструментов работают поверх X, вы используете его независимо от того, нравится вам это или нет. Где-то есть хороший учебник, который мне лень искать. Он проведет вас через создание простого Hello World. Для этого вам нужно научиться создавать окно, запрашивать события, отображать окно и обрабатывать события в цикле. Вы даже можете зайти так далеко, чтобы заказать подержанные книги на Amazon. O'Reilly vols 1 и 2 (на данный момент получают самые дешевые выпуски, но не более ранние, чем X11R4), необходимы для справки и для получения полной истории о том, как части работают вместе. Для изучения, однако, лучшая книга Эрик Джонсон и Кевин Рейхард - Программирование приложений X Window.

В какой-то момент этого путешествия, как все говорят, вы обнаружите, что с вас хватит. Две страницы кода просто для выбора визуала, а затем вам все еще нужно заполнить цветовую карту, прежде чем вы сможете нарисовать свой собственный растровый рисунок. И затем два дня переписывания и отладки, чтобы понять, что все это работает ; Вы просто забыли XFlush()!

Борьба важна, потому что вы по достоинству оцените наборы инструментов, как только найдете тот, который вам нравится.

1 голос
/ 12 декабря 2008

Я бы также предложил lesstif / мотив. Он также основан на X, и кривая обучения, на мой взгляд, не такая крутая, как GTK или Qt. Пользовательский интерфейс, который вы строите с его помощью, не будет таким сложным, как тот, который вы могли бы создать с помощью GTK или Qt. Больше информации можно найти здесь .

Как уже упоминали другие, вы, вероятно, не хотите, чтобы Х - это боль.

0 голосов
/ 28 октября 2011

о да, есть такие "родные" вещи:

FBUI, svgalib, directfb, exa (kdrive), SDL, Allegro .. + Wayland, хотя и не основной.

http://home.comcast.net/~fbui/

http://www.svgalib.org/

http://directfb.org/

http://xorg.freedesktop.org/wiki/ExaStatus

+ http://wayland.freedesktop.org/

...