java — Связывает ли язык для Qt переопределение модулей Qt на определенном языке?

Я хотел знать, реализовали ли языковые привязки для Qt, такие как Qt Jambi и PyQt, все модули Qt или нет. то есть, являются ли они просто средством объединения целевых языков (JAVA, python, …) с модулями Qt C ++ или целевые языки работают с модулями, реализованными с целевым языком.

например простой вопрос: работает ли Qt Jambi с модулями Qt, написанными на Java? (Если да, можем ли мы написать приложения Qt Jambi, которые могут работать на разных платформах? Т.е. все ли модули Qt Jambi являются некоторыми jar-файлами?)

1

Решение

Что касается PyQt, то ответ на вопрос, «реализовал ли он все модули Qt», таков: да и нет. Но в основном нет.

PyQt использует ГЛОТОК инструмент для генерации своих привязок. Если вы хотите понять, как это сделать, вот как автор PyQt и SIP объясняет этот процесс:

Для PyQt v4 я использую внутренний инструмент (написанный, конечно, с использованием PyQt)
называется метасип. Это своего рода IDE для SIP. Он использует GCC-XML для
проанализировать последние файлы заголовков и сохранить соответствующие данные, как XML, в
проект метасипа. Metasip затем делает эквивалент DIFF против
предыдущей версии API и отмечает все изменения, которые необходимо
смотреть на Эти изменения затем делаются через графический интерфейс и отмечены
вне списка TODO. Генерация файлов .sip — просто нажатие кнопки.
В моем хранилище subversion PyQt v4 — это всего лишь 20M XML-файл.
Обновление PyQt v4 для небольшого выпуска Qt v4 занимает около получаса
Работа.

С точки зрения того, как сгенерированный код работает, то я не думаю, что это очень
отличается от того, как работает любой другой генератор привязок. Python имеет
очень хороший C API для написания модулей расширения — это один из
причины, по которым так много сторонних инструментов имеют привязки Python. Для каждого
C ++ класс, SIP-сгенерированный код создает соответствующий класс Python
реализовано в C.

Так что PyQt — это просто набор довольно тонких оберток вокруг модулей Qt, и обычно он не воплощать в жизнь любой функционал сам по себе. Однако есть несколько исключений из этого.

Во-первых, PyQt добавляет немного синтаксического сахара в разных местах, чтобы сделать API-интерфейсы Qt более привлекательными для программистов Python (например, поддержка нового стиля сигналов и слотов).

Во-вторых, есть некоторые API Qt, которые PyQt не имеет смысла предоставлять из-за фундаментальных языковых различий между C ++ и Python (например, нет ничего эквивалентного приведению типов в Python).

И, наконец, есть модуль uic. В отличие от PySide, PyQt не переносит QtUiTools модуль вообще. Вместо этого он предоставляет модуль, написанный на чистом Python, который на самом деле делает реализовать эквивалентную функциональность из библиотеки Qt. Но это скорее исключение, чем правило.

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

2

Другие решения

У них нет покрытия на все, нет. Вот один из мои предыдущие ответы это показывает, что в PySide отсутствовал перенос одного класса.

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

Что касается вашего вопроса о Qt Jambi и jar, я не уверен, но по крайней мере есть некоторое разделение на уровне кода, как вы можете видеть в Вот.

1

Похожие вопросы
Добавить ответ
Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Нажимая кнопку «Отправить», я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности этого сайта.