Прототипирование Qt / C ++ в Python - PullRequest
25 голосов
/ 22 апреля 2010

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

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

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

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

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

Ответы [ 3 ]

36 голосов
/ 22 апреля 2010

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

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

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

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

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

DEPLOYMENT

C ++ - Для многих приложений зависимости достаточно просты, поэтому создать установщик с помощью такого инструмента, как NullSoft's 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 ++, вы можете легко переключаться между ними позже.

3 голосов
/ 23 апреля 2010

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

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

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

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

1 голос
/ 07 августа 2016

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

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

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

  • Добавление описаний и заметок на ваши экраны

  • Простая интеграция макетов в технические документы без необходимости снимать экраны

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

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

...