Вопрос

Сейчас у меня есть идея начать разработку фреймворка, подобного bare bones Qt / GTK +, но я хочу знать некоторые вещи, прежде чем приступить к созданию этого проекта:

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

Решение

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

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

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

Другие советы

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

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

  1. GTK ( ГТК ):git клонирует git://git.gnome.org/gtk+
  2. Qt:git клонирует git://gitorious.org/qt/qt.git

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

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

Однажды я сделал нечто подобное, еще в первые годы этого десятилетия.Это было после того, как я программировал для 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 ++.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top