Подтвердить что ты не робот

Прототипирование Qt/С++ в Python

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

РЕДАКТОР /IDE: Используйте любой редактор /IDE, с которым вам удобно, но я настоятельно рекомендую тот, который поддерживает рефакторинг. Если вам удобно с Eclipse, используйте его. Если вы хотите в основном идти по маршруту C++ и не слишком знакомы с какими-либо редакторами, вам лучше использовать QtCreator. Эрик - чрезвычайно хорошая Python IDE с поддержкой рефакторинга, если вы не собираетесь делать много 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 Installer или InnoSetup, не составит труда.

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

Я хотел бы нарисовать макеты UI, прежде чем запускать прототипы кода. Вот некоторые преимущества:

  • Быстрее, чем кодирование прототипов, поскольку не задействовано программирование

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

  • Добавить описания и заметки на экраны

  • Легко интегрировать макеты в документы спецификации, не занимаясь экранами

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

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