Подтвердить что ты не робот

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

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

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

любая помощь приветствуется.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Нет, нет. Вернувшись в раннюю версию X11, например R1 или R2, я закодировал полную программу "Hello, world" только в Xlib.

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

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

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

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

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

Ответ 8

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

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

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

Ответ 9

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

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

Ответ 10

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