Как работает Qt (точно)? - PullRequest
12 голосов
/ 15 июня 2010

Когда вы пишете приложение с использованием Qt, можно ли его сразу запустить в разных операционных системах? И (поправьте меня, если я ошибаюсь) вам не нужно уже устанавливать Qt на всех разных платформах, где вы хотите выполнить свое приложение?

Как именно это работает? Компилируется ли Qt на желаемую платформу, или он связывает некоторые "библиотеки" (libs), или как он это делает? Отличается ли это от программирования Java-приложения, которое работает кроссплатформенно.

Если вы используете Python для написания приложения Qt с привязками Python, нужно ли вашему конечному пользователю устанавливать Python?

Ответы [ 3 ]

15 голосов
/ 15 июня 2010

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

Для вашего последнего вопроса пользователю потребуются Python, библиотеки Qt и библиотека связывания (например, pyqt), но существуют различные способы их объединения.

12 голосов
/ 15 июня 2010

PyQT [и его двоюродный брат с открытым исходным кодом PySide] представляют собой отличную кроссплатформенную привязку QT для python, но это не волшебное решение для доставки вашего приложения на все платформы без каких-либо действий по установке пакетов / установщику.Я думаю, может быть, вы ожидаете какой-то магии.

QT - это кроссплатформенная библиотека, написанная на C ++.Это означает, что вы можете написать свой код C ++ или Python (или другой язык с привязками) один раз, создать «окно» (форму, диалоговое окно, что-то на экране) и заполнить его элементами управления (кнопками и всем этим.) и не нужно иметь дело с различиями в платформе в том, как кнопки создаются в Windows, Linux и в Mac OS X.

Поскольку это библиотека, она может быть упакована несколькими способами.Он может быть «статически связан» (встроен в ваш исполняемый файл / двоичный файл / приложение) или «динамически связан» (известен как DLL в Windows, совместно используемая библиотека или в Unix / Linux или в качестве платформы, в Mac OS X).Он не всегда «установлен» на компьютере, если он не является общей библиотекой.

Даже если он «установлен» на компьютер, на этом компьютере может существовать несколько версий, и поэтомудумайте о нем как о расширении вашего компьютера, а скорее как о приложении (программе) на вашем компьютере.

Если вы используете привязки Python для QT, тогда ваш установочный пакет для вашего приложения должен включатьдвоичные файлы привязки QT (расширения Python), базовая среда выполнения Python, включая исполняемый файл Python и базовые библиотеки, а также исходный код вашей программы.Можно упаковать большую часть этого в один «пакет».Например, в Mac OS X все это можно легко поместить в пакет «.app», а в Windows и Linux, я считаю, есть инструменты для упаковки и установки, которые могут помочь вам сделать это легко.

Даже несмотря на то, что вам нужно будет написать код пользовательского интерфейса для вашего приложения только один раз, вы не сможете волшебным образом доставить приложение на все три основные платформы одновременно, не выполняя по крайней мере сборки установщика или упаковки,отдельно для каждой платформы.Пользователи ожидают загрузки пакета установки / установки для Windows или Mac OS X, и, возможно, для Unix / Linux это зависит от того, какой дистрибутив вы устанавливаете.

Обновление благодаря AdamW за эту ссылку nokia, предоставляющую информацию о развертывании

5 голосов
/ 15 июня 2010

Проблема в вашем определении «установлен». Чтобы Qt работал, исполняемый файл просто должен иметь доступ к соответствующим библиотекам.

Конечно, для каждой платформы должны создаваться разные исполняемые файлы и библиотеки (см. Qt docs ).

О Python: если вы хотите запустить исполняемый файл Python, вы должны установить его (более традиционным способом). Например, если вы не используете py2exe в Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...