Как создать кроссплатформенное приложение, сделав интерфейсные модули (Mac / Qt / GTK +) полностью независимым способом? (Как передача) - PullRequest
2 голосов
/ 15 июня 2010

Я поражен Передача , клиент BT.У него есть Mac, GTK +, QT, веб-клиент и интерфейс CLI.

Я попытался прочитать некоторые из его источников, чтобы понять, как он создает все эти интерфейсы, но не повезло.

Разработчик создает их, используя одну IDE?Или он создает интерфейсную логику в каждой конкретной среде (особенно mac), «экспортирует» этот код окна и интегрируется с основной логикой?Можно ли создать этот интерфейс Mac в другой ОС, используя IDE?

Как разработчики создали это программное обеспечение с таким количеством интерфейсов, независимым способом?

Я думал о созданииПриложение Python с несколькими интерфейсными модулями, как этот.Существует ли книга / веб-сайт с информацией о нескольких интерфейсных модулях, подобных этому?Я предпочитаю этот «нативный» подход вместо «моно» или других кроссплатформенных решений, которые делают приложения похожими на те, которые они используют.

Ответы [ 2 ]

1 голос
/ 20 июля 2010

Насколько я вижу из источников, авторы используют (возможно статическую) библиотеку libtransmission для всего общего кода (обработка BitTorrent и т. Д.) И предоставляют различные графические интерфейсы (с собственным main.c и т. Д.) В качестве различных приложений. для каждой платформы. Так что, как вы и думали, все наоборот (GUI-приложения, использующие libtransmission, а не Transmission, используют libGui)

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

Я думаю, что интерфейсы просто выросли, может быть, у них было только одно приложение, которое они запустили, реорганизовали часть bittorrent, создали второе приложение, подключили его к нему и т. Д.

Создание и управление интерфейсами независимым способом возможно, когда вы

  • Проверьте, собирается ли он на других платформах (для этого вы можете использовать сервер сборки)
  • Отдельный код для конкретной платформы (например, с помощью #defines, разных файлов или вспомогательной библиотеки)
  • Спросите других сопровождающих (которые видят это с других платформ), как они будут абстрагировать конкретные функции (какую информацию они должны предоставить? Какой поток может вызывать это? При каких обстоятельствах им нужен обратный вызов?
1 голос
/ 16 июня 2010

Различные интерфейсы написаны отдельно, чтобы они могли лучше интегрироваться со своими платформами. Например, клиент Mac написан на Objective-C и использует Cocoa и Growl, а клиент GTK + написан на C и использует DBUS, libcanberra и gconf2.

Есть несколько программистов, которые работают над Transmission, а не над одним, или это будет непомерно сложно. Синхронизация различных «разновидностей» Transmission отнимает много времени и не всегда успешна. Например, группировка существует в клиенте Mac, но только на этапах планирования для версий GTK + и Qt.

Что касается используемых IDE ... программист Mac использует xcode, а программист GTK + использует vim. Я не знаю, что использует программист Qt. :)

...