Прототип Qt/C++ в Python

Я хочу написать приложение на C++ с помощью Qt, но сначала создать прототип с помощью Python, а затем постепенно заменить код Python на C++.

Правильный ли это подход и какие инструменты (привязки, генераторы привязок, IDE) следует использовать?
В идеале все должно быть доступно в репозиториях Ubuntu, чтобы мне не пришлось беспокоиться о несовместимых или старых версиях и иметь все настроить с помощью простого aptitude install.
Есть ли подробная документация по этому процессу или мне нужно изучить каждый компонент, и если да, то какие?

Прямо сейчас у меня есть несколько вариантов: Qt Creator из-за хорошего автодополнения и интеграции с Qt.
Eclipse, так как он поддерживает как C++, так и Python. Эрик (еще не использовал) Вим

PySide, поскольку он работает с CMake и Boost.Python, поэтому теоретически это упростит замену кода Python. PyQt, так как он более широко используется (больше поддержки) и доступен в виде пакета Debian.

Редактировать: поскольку мне придется развернуть программу на разных компьютерах, для C++-решения потребуется 1-5 файлов (программа и некоторые файлы библиотеки, если я связываю ее статически), используя Python I. пришлось бы собирать PyQt/PySide/SIP/что угодно на каждой платформе и объяснять, как установить Python и все остальное.


person tstenner    schedule 22.04.2010    source источник


Ответы (3)


Я хочу написать приложение на C++ с помощью Qt, но сначала создать прототип с помощью Python, а затем постепенно заменить код Python на C++. Это правильный подход?

Это зависит от ваших целей. Сделав и то, и другое, я бы порекомендовал вам оставаться с Python везде, где это возможно и целесообразно. Хотя это требует некоторой дисциплины, на Python вполне можно писать очень большие приложения. Но по мере того, как вы находите горячие точки и вещи, которые лучше обрабатываются на C++, вы, безусловно, можете портировать соответствующие части на C++.

Есть ли исчерпывающая документация по этому процессу или мне нужно изучить каждый компонент, и если да, то какие?

Вот что я бы порекомендовал для различных частей:

EDITOR/IDE: используйте любой редактор/IDE, который вам удобен, но я настоятельно рекомендую тот, который поддерживает рефакторинг. Если вам удобно работать с Eclipse, используйте его. Если вы хотите в основном идти по пути C++ и не очень хорошо знакомы с какими-либо редакторами, возможно, вам лучше использовать QtCreator. Eric — очень хорошая среда разработки Python с поддержкой рефакторинга, если только вы не собираетесь Делая много C++, взгляните на это. Более того, его исходный код является примером правильного использования PyQt.

ПРОЦЕСС:

Краткое резюме:

  1. Напишите свое приложение на Python, используя PyQt.
  2. При обнаружении горячих точек преобразуйте несвязанные классы Python в C++.
  3. Создайте привязки для этих классов с помощью SIP.
  4. Импортируйте недавно определенные библиотеки в Python вместо их аналогов Python.
  5. Наслаждайтесь ускорением

Общие сведения:

Напишите приложение на Python, используя PyQt. Старайтесь поддерживать хорошее разделение задач, чтобы при переносе частей на C++ они будут отделены от их зависимостей. Когда вам, наконец, понадобится что-то портировать на C++, напишите это на C++/Qt, а затем создайте для него привязки с помощью SIP. У SIP есть хорошее справочное руководство по этому процессу, и у вас есть весь PyQt как пример.

РАЗВЕРТЫВАНИЕ:

C++. Для многих приложений зависимости достаточно просты, поэтому создать установщик с помощью такого инструмента, как Установщик NullSoft или InnoSetup.

Python/PyQt. Приложения PyQt немного сложнее установить из-за зависимости от Python и его зависимости от наличия библиотек Qt. Один человек задокументировал свои усилия по этот пост на ARSTechnica. py2exe довольно хорошо работает в Windows и должен работать нормально. IME, freeze.py, который поставляется с исходным кодом Python, иногда имеет проблемы с определением того, какие общие библиотеки действительно необходимы, и иногда это приводит к созданию двоичного файла, зависимостей которого нет. Py2app можно заставить работать на Mac OS X.

Но хуже, однако, является лицензирование PyQt/Qt. Если вы разрабатываете коммерческое приложение, вам необходимо иметь коммерческую лицензию PyQt (и Qt) и убедиться, что пользователи не могут легко изменить исходный код или иным образом написать код для PyQt/Qt API из-за лицензионных ограничений. По этой причине автор PyQt создал инструмент под названием VendorId (хотя он лицензия Python). Внутри VendorId есть инструмент под названием SIB, который можно использовать для создания исполняемого файла, зависящего только от интерпретатора Python. Но если вы собираетесь зайти так далеко, вы можете установить собственный Python вместе со своим приложением.

ОТВЕТСТВЕННОСТЬ: я вообще не использовал PySide, поэтому я не конечно, как это сравнивается с PyQt. Также обратите внимание на следующее предупреждение на их веб-сайте:

PySide находится в стадии разработки и еще не подходит для разработки приложений, требующих стабильности на уровне производства.

Но, в хорошем смысле, они намерены, по крайней мере, для первоначального выпуска, «поддерживать совместимость API с PyQt». Таким образом, помимо привязок C++, вы можете легко переключаться между ними позже.

person Kaleb Pederson    schedule 22.04.2010
comment
Хороший ответ! Вы можете рассмотреть раздел о py2exe/freeze.py в ответ на редактирование OP, даже если они явно не задавали вопрос. - person tgray; 23.04.2010
comment
@tgray - спасибо за внимание к правкам. Я добавил раздел развертывания. - person Kaleb Pederson; 23.04.2010
comment
возможно, обновите часть Pyside is not suited for production-level, так как это было какое-то время. - person vikki; 05.11.2012
comment
На данный момент я бы подумал об использовании PyInstaller вместо Py2exe или Py2app. Я обнаружил, что PyInstaller готов к работе с приложениями малого и среднего размера, а также совместим с разными платформами. - person taynaron; 24.02.2013

Если вы только изучаете Qt и хотите использовать скорость прототипирования, которую дает вам Python, я бы рекомендовал вам создать пример проекта с использованием PyQt. Как вы сказали, есть пакет Debian, так что вы всего в двух шагах от создания своего первого приложения.

Я лично использую gVim в качестве своего редактора Python/Qt, но вы можете без особых проблем использовать любой удобный для Python редактор. Мне понравился WingIDE, и у них есть автозаполнение для Qt, но как только вы потягиваете vim kool-aid, переключаться сложно.

Я бы сказал, что PySide на 95%+ совместима с PyQt, а лицензия LPGL хороша, но если вы просто пытаетесь создать прототип своего первого приложения Qt, то я не думаю, что есть реальная причина использовать PySide. Хотя мне больше нравятся документы PySide, вы также можете просто использовать их и заменить все ссылки на библиотеки на PyQt.

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

person swanson    schedule 22.04.2010

Я рисовал макеты пользовательского интерфейса, прежде чем приступать к кодированию прототипов. Вот некоторые преимущества:

  • Быстрее, чем кодирование прототипов, так как не требуется программирование

  • Быстрое заполнение виджетов, таких как таблицы и деревья, данными

  • Добавляйте описания и примечания к своим экранам

  • Легко интегрируйте макеты в документы спецификаций без необходимости захвата экранов.

  • Проверка концепций дизайна пользовательского интерфейса перед внедрением

Есть много инструментов, которые могут помочь вам в этом, но если вы собираетесь использовать Qt, MockupUI может быть хорошим выбор, так как он отображает виджеты Qt с собственными стилями для Windows 7,8 или 10, что делает ваш макет более реалистичным.

person Eugen Fernea    schedule 07.08.2016