Как вы делаете графический интерфейс Linux?

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

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

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

12.12.2008 01:37:08
11 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

65
13.02.2011 01:43:22
Мне пришлось использовать мотив непосредственно (только потому, что используемый нами wm разработан внутри дома), и это нелегко. Я бы предпочел использовать один из свободно доступных уровней абстракции пользовательского интерфейса
hhafez 12.12.2008 04:19:41
Написание пользовательского интерфейса в Xlib - это не то же самое, что написание обычного Win32, это больше похоже на написание пользовательского интерфейса в DirectDraw; это намного более низкий уровень, чем Win32
Ana Betts 12.12.2008 04:32:30
Если вы не желаете проходить полдюжины уровней абстракции, разработка Linux не для вас. ;)
jalf 16.02.2009 18:15:04
@jalf: Большинство разработок в настоящее время, на самом деле.
Joey 16.04.2010 15:19:00

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

13
12.12.2008 01:45:35
Согласен; Я думаю, что это другой способ делать вещи в мире Linux.
Sydius 12.12.2008 01:47:45
Я понимаю, что Linux изначально был просто консолью, а графические интерфейсы добавлялись сторонними программами. Но это странно, когда я использую все эти наборы инструментов в Linux, и мне кажется, что нужно получить графический интерфейс, который вам нужен, чтобы использовать «хаки» или, так сказать, бить вокруг куста.
John T 12.12.2008 01:49:28
@ Майк, ты чувствуешь «хаки», когда играешь в игры DirectX с драйверами NVidia? Это стороннее программное обеспечение.
paxdiablo 12.12.2008 01:51:02
@Mike: в философии Unix есть один инструмент для каждой работы. Xlib находится на более низком уровне, чем вы ожидаете, он позволяет вам отображать вещи. Кнопки и прочее находятся в наборе инструментов, поэтому вы должны выбрать один ...
Piotr Lesnicki 12.12.2008 01:57:27

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

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

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

4
12.12.2008 01:48:49

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

4
12.12.2008 01:50:49
Ну, у X есть официальный вариант, это просто очень низкий (уродливый) уровень.
paxdiablo 12.12.2008 01:52:59

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

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

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

Вы не хотите идти туда.

44
12.12.2008 02:32:36
этот комментарий заставил меня смеяться
matchew 22.05.2011 00:38:02
-1. Типичная ерунда, обнаруживаемая на сайтах вопросов и ответов - всякий раз, когда кто-то спрашивает «как делать ABC?», Кто-то отвечает «почему вы хотите делать ABC?». Если вы не понимаете, как кодировать с помощью Xlib, вы никогда не сможете написать Xlib самостоятельно - потенциально для нового ядра ОС, которое не было изобретено. Конечно, если вы профессионально поставляете программное обеспечение в сроки, вы будете использовать хорошо поддерживаемую абстракцию высокого уровня. Но если вы слепо доверяете современным программистам, вы никогда не научитесь создавать примитивы, когда возникнет такая необходимость.
Mozan Sykol 30.08.2013 06:15:40
Типичная педантичная чепуха. Он явно новичок в этом. Если он хочет изучать внутреннее устройство, он может, но - опять же, сделав это, когда не было ничего кроме Xlib - только дурак пытается сделать это просто, чтобы научиться писать X GUI.
Charlie Martin 31.08.2013 07:52:23

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

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

1
12.12.2008 02:41:48

«Родным» интерфейсом для 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.

3
12.12.2008 04:26:51

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

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

10
12.12.2008 07:44:29

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

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

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

2
7.08.2011 06:57:18

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

0
7.08.2011 08:07:12

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

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/

0
28.10.2011 14:54:32