Разработайте Qt / GTK-подобный фреймворк - PullRequest
1 голос
/ 27 октября 2009

Теперь у меня есть идея начать разработку голой среды, подобной Qt / GTK +, но я хочу кое-что узнать, прежде чем приступить к созданию этого проекта:

  • Какова структура GTK + и Qt?
  • Нужно ли мне разрабатывать оконный менеджер для создания моей собственной инфраструктуры?
  • Какие ресурсы для запуска?

Ответы [ 4 ]

5 голосов
/ 28 октября 2009

Написание GUI / фреймворка приложения было бы отличным опытом обучения, но даже довольно небольшая фреймворк приложения была бы очень большой работой, и вам не нужно заниматься этим, пока вы не станете достаточно опытным в написании приложений с использованием нескольких других фреймворков и наборы инструментов виджетов.

Однажды я сделал что-то подобное, еще в начале этого десятилетия. Это было после того, как я программировал для Mac более 15 лет, для Windows более 10 лет, и программировал как непосредственно для их собственной графики, событий и API виджетов, так и для различных объектно-ориентированных наборов инструментов для них, включая PowerPlant, MFC и MacApp. Когда я начал работать над приложением PalmOS, я потратил пару недель на написание очень маленькой платформы приложений, смоделированной на PowerPlant. Но я не смог бы преуспеть вообще без этих десятилетий широкого и глубокого опыта работы с таким большим количеством систем графического интерфейса.

Делать это для Linux / X11 - еще больше работы. Это связано с тем, что, в отличие от Mac OS и Windows, ни X11, ни Linux не предоставляют встроенные виджеты пользовательского интерфейса, а также не имеют много графических примитивов или возможностей разметки текста. GTK + является частью экосистемы GNOME; он предоставляет виджеты, получает свою очередь сообщений и внутреннюю связь от GObject, использует GDK для абстрагирования и упрощения передачи графики и событий с помощью X11, а также использует Pango и Cairo для рендеринга и разметки текста. Я работаю по всей этой системе, и она, вероятно, представляет собой много десятков человеко-лет тяжелой работы очень умных людей. И я уверен, что Qt очень похож.

Так что, если вы действительно хотите это сделать, я бы порекомендовал вам:

  1. Написание программ с много различных приложений и наборов виджетов, на нескольких операционных системах. Это поможет вам узнать не только , как работают такие системы, но и почему они спроектированы такими, какие они есть. И это даст вам некоторое представление о том, что работает хорошо, а что плохо.
  2. Внесите исправления ошибок или новые функции в одну или несколько различных сред с открытым исходным кодом. GTK + имеет список задач для начинающих по . Еще один отличный фреймворк с открытым исходным кодом - wxWidgets .
  3. Станьте программистом C / C ++ уровня эксперта.

Когда вы сделаете это в течение нескольких лет, у вас будет опыт, подходящий для решения ваших собственных задач.

5 голосов
/ 27 октября 2009

Разработка графического интерфейса / прикладной среды является значительным мероприятием. Возможно, вы захотите очень понять, почему вам нужно написать еще один фреймворк.

Оба упомянутых вами проекта имеют открытый исходный код. Почему бы не начать там?

  1. GTK: git clone git: //git.gnome.org/gtk+
  2. Qt: git clone git: //gitorious.org/qt/qt.git

Ed Вы спрашиваете, какова структура GTK и Qt, нужно ли вам писать свой собственный менеджер вдов (ответ: нет) и как начать. Ответы как минимум на первые два в исходном коде. Не забывайте, что великие практикующие в любой области учатся, наблюдая за другими. Чтение кода ничем не отличается.

3 голосов
/ 27 октября 2009

Это звучит как крупное начинание, по крайней мере, как стартовый проект.

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

И нет, вам не нужно писать собственный оконный менеджер; Инструментарий в основном касается того, что происходит внутри окон, а не самого управления окнами. Конечно, вы можете решить, что ваша «платформа» должна иметь более широкий охват и включать WM.

2 голосов
/ 14 мая 2010

Я думаю, что некоторые ответы здесь могут немного преувеличить. Очевидно, что создание чего-то такого же качества, ширины и глубины, как у Qt и Gtk, - огромная задача. Но вы можете сделать более простые вещи и все же многое узнать о том, как это работает. Я предлагаю поступить так, как я поступил в университете. Используйте OpenGL с Glut. Тогда у вас уже есть базовая функциональность рисования и система событий. Затем вам нужно создать классы для кнопок, текстовых полей и т. Д.

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

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

Но да, если вы хотите создать что-то, что будет конкурировать с Gtk + и Qt, забудьте об этом. Это командная работа на протяжении многих лет.

...