Использование пользовательских подклассов Qt в Python - PullRequest
3 голосов
/ 31 мая 2010

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

Я пытаюсь сформулировать модульную архитектуру для некоторого внутреннего программного обеспечения. Основные компоненты находятся на C ++ и доступны через SWIG для Python для экспериментов и быстрого прототипирования новых компонентов. Кажется, у Qt есть некоторые классы, которые я мог бы использовать, чтобы не слишком изобретать колесо здесь, но меня беспокоит, как некоторые кусочки будут совмещаться.

В частности, если я создам некоторые классы C ++, мне нужно будет открыть их через SWIG. Некоторые из этих классов, вероятно, являются подклассами классов Qt или иным образом имеют материал Qt, представленный в их открытых интерфейсах. Кажется, что это может вызвать некоторые осложнения.

Уже есть два интерфейса для Qt в Python, PyQt и PySide. Вероятно, будет использовать PySide для лицензирования. О том, как больно ожидать, что пользовательский подкласс класса Qt в оболочке SWIG будет хорошо играть с любым из них? Какие сложности я должен знать о первоначальной?

1 Ответ

7 голосов
/ 31 мая 2010

PyQt предоставляет код C ++ для Python через SIP ; PySide делает это через Shiboken . Оба имеют примерно те же возможности, что и SWIG (за исключением того, что они поддерживают только «расширенный C ++ до Python», в то время как SWIG также имеет бэкэнды для Ruby, Perl, Java и т. Д.). Ни SWIG, ни SIP, ни Shiboken не предназначены для взаимодействия друг с другом. Вы не могли бы удобно использовать SWIG, чтобы обернуть любой код, используя расширения C ++, которые требуются Qt (для поддержки сигналов и слотов), и я понятия не имею, какие опасности могут вас ожидать при попытке взаимодействия с SIP (или Shiboken) и SWIG -обернутый код.

Почему, могу я спросить, вы решили использовать два отдельных и эквивалентных способа для переноса различных частей вашей кодовой базы C ++ (Qt через SIP или Shiboken, все остальное через SWIG)? Если вы все еще можете пересмотреть это странное дизайнерское решение, я настоятельно рекомендую вам сделать это.

Если ваш выбор SWIG высечен на камне, я предсказываю большие неприятности всякий раз, когда вы упаковываете код C ++ с использованием расширений Qt (то есть слотов или сигналов) и, как правило, полностью жалкое время для всех участников. Если вы выберете один способ обернуть и придерживаться его, проблемы должны быть значительно уменьшены. У меня нет реального опыта работы с Shiboken (это слишком ново, и я почти никогда не использую приложения с графическим интерфейсом в наши дни ... веб-приложение всего мира! -), но я использовал SIP в этой роли в прошлом ( еще до того, как это было прилично задокументировано - в настоящее время мне кажется, что это великолепно задокументировано, и поверхностное прочтение Shiboken производит на меня такое же впечатление), и я могу очень рекомендовать его (действительно, если бы я мог выбрать его) было бы предпочтительным вариантом, чем SWIG, даже если в проекте не было кода Qt).

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