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

Помощь в выборе между PyQt или С++/Qt

Я новичок в разработке приложений GUI, и я выбрал для этого рамки Qt. Я вижу, что большая часть разработки в Qt выполняется на языке С++, но мне нравится python для упрощения синтаксиса и простой реализации. А также Qt доступен с привязкой к Python, называемой PyQt

Предположим, что в будущем, если я подам заявку на компанию, требующую Qt, но я знаю, что Qt с использованием python будет полезен в этом случае. И есть ли какие-либо недостатки в использовании PyQt над С++/Qt?

4b9b3361

Ответ 1

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

Но, очевидно, есть некоторые отличия:

  • новый синтаксис сигнала/слота PyQt полностью отличается от С++ (хотя синтаксис С++ по-прежнему доступен в PyQt как "старый -стиль" ). Если вы в конце концов перейдете на С++, я предлагаю вам придерживаться "старого стиля" синтаксиса и избегать нового.
  • Некоторые конкретные классы Qt обернуты в PyQt в двух разных режимах: версии 1 и версии 2. v1 является старой и обычно похож на С++; v2 является более новым и, как правило, более pythonic и очень отличается от С++; для всех классов v1 является значением по умолчанию, если вы используете PyQt для Python 2.x, а v2 по умолчанию используется, если вы используете PyQt для Python 3.x. Если вы планируете перейти на С++, я предлагаю вам придерживаться v1, поэтому либо используйте Python 2.x или используйте Python 3.x и явно активировать v1.
  • Синтаксис для определения свойств Qt отличается (и вам в большинстве случаев не нужно будет их использовать, поскольку свойства доступны из коробки на языке Python, единственный случай, когда вы захотите использовать свойство Qt при написании плагина дизайнера, и в этом случае синтаксис немного отличается между Python и С++).
  • для moc нет отдельного шага сборки; с Python, вы можете создать свой собственный QObject напрямую, в то время как на С++ вам нужно передать исходный код через инструмент moc.
  • с PyQt вы не узнаете систему сборки qmake, которая является системой построения по умолчанию, используемой программистами С++/Qt (а также некоторыми альтернативами, такими как cmake).
  • вы не узнаете, как использовать Qt Creator, который является "официальной" IDE для С++/Qt, поскольку он не поддерживает Python.
  • Qt Параллельный модуль недоступен в PyQt из-за того, как он реализован на уровне С++. Если вы хотите узнать больше об этом модуле, вам придется придерживаться С++/Qt

Итак, в конце дня: вы можете почти все Qt использовать PyQt, но если бы я был вами, я бы не подавал заявку на интервью С++/Qt (а не на Qt essentials certification), не пробовав хотя бы тривиальную программу Qt/С++ после опыта PyQt.

Для получения дополнительной информации, пожалуйста, просмотрите PyQt4 Справочное руководство, которое, несмотря на его имя, в основном перечисляет все различия между PyQt и С++/Qt.

Ответ 2

PyQT только GPL (если вы не платите). Я бы посмотрел на PySide, это сделали те же люди, что и Qt (http://www.pyside.org/). Я настоятельно рекомендую PySide. Я использовал QT и PySide, и сбор мусора в Python действительно приятен.

Но это сводится к личным предпочтениям.

Ответ 3

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

  • Даже если вы хотите пойти на PyQt, я бы предложил сначала изучить С++ API. Это в основном из-за того, что PyQt является оболочкой поверх API С++, а вещи, которые происходят под ними, - это С++, а не Python. Вы будете получать ошибки, такие как ошибка сегментации, странное разыменование и т.д., Когда вы пытаетесь выполнить PyQt, и даже если ваш код может выглядеть хорошо, это С++, который находится под ним, что вызывает проблемы. Это относится ко всему, что есть, чтобы быть честным. Даже если у вас есть аккуратный интерфейс сверху, всегда лучше по крайней мере изучить основы того, что этот интерфейс скрывается от вас. Вы должны быть осторожны, потому что, даже если окажется, что ваше приложение PyQt работает нормально, у вас могут возникнуть проблемы в раю на стороне С++, которая выполняет все это.

  • В последние годы я нашел все больше и больше больших библиотек, которые имеют своего рода Qt-интеграцию. Многие из них написаны на Python или у него есть обертки. matplotlib - один прекрасный пример. Он имеет замечательную интеграцию с PyQt. Добавьте к этому обертки OpenCV Python, Numpy и т.д., И вы получите потрясающий пакет. Я не могу сказать то же самое о С++ Qt, особенно в плане заговора (Qt Commercial предлагает графику btw, но я бы не хотел платить за это только за это и во время работы над бесплатными проектами с открытым исходным кодом в свободное время...)

  • Изучите PyQt позже, чтобы улучшить время разработки - хотя у меня было гораздо больше опыта с С++ Qt, я обнаружил, что использование PyQt значительно ускорило мою работу. Конечно, это происходит не только из-за PyQt, но и из-за самого Python - одного из лучших языков прототипирования. Одной из недостатков времени компиляции является огромное преимущество. Вы пишете виджеты и просто запускаете их мгновенно, а не ожидаете длительных периодов компиляции. Даже если вы разрабатываете приложения С++ Qt, я бы по-прежнему советовал иметь PyQt на стороне, даже если он просто тестировал эту и эту функцию Qt. В большинстве случаев вы можете легко преобразовать код PyQt в С++ Qt (конечно, вы должны быть знакомы с обоими для этого;))

  • Документация PyQt отсутствует по сравнению с его сопоставлением с Q ++ Qt, особенно когда речь заходит о перегрузке различных функций С++ (и поскольку Python не перегружает). Я много раз вытягивал свои волосы, пытаясь понять, что функция точно возвращает/принимает в качестве аргументов в PyQt (один прекрасный пример: QProcess.startDetached(...)). Когда-либо так часто при программировании с PyQt мне все равно нужно искать материал в документации на С++ Qt.

  • Существуют различия в лицензировании в С++ Qt и PyQt (и PySide, если вы хотите использовать его вместо PyQt, если вам не нужна поддержка Qt5, которую предлагают только API С++ и PyQt5). Кроме того, вам необходимо рассмотреть проблемы лицензирования с PyQt и PySide, поскольку в соответствии с официальными часто задаваемыми вопросами в Qt wiki PySide является единственной привязкой, которая является официально поддерживаемая компанией Qt из-за того, что компания не смогла достичь соглашения о лицензировании привязок PyQt с Riverbank Computing (люди, стоящие за PyQt). На данный момент это может сильно не измениться, но я уверен, что долгосрочное развитие и поддержка PySide только увеличится (если соглашение не достигнуто с Riverbank), а также откроется для вкладов сообщества Qt.

  • В PyQt проще работать с MOC

  • Некоторые синтаксические различия присутствуют - как упоминалось другими в терминах слотов и сигналов, у вас есть старый стиль (поддерживается как С++ Qt, так и PyQt) и новый стиль (поддерживается только PyQt). С недавними обновлениями в Qt5, хотя С++ Qt также предоставляет новый стиль, который отличается от нового стиля PyQt. Итак, теперь у нас есть 3 способа подключения слотов и сигналов с точки зрения синтаксиса (и даже таких важных вещей, как проверка типов). Еще одна большая разница возникает при работе с атрибутами и настройками Qt. Некоторые классы С++ Qt имеют несколько версий в PyQt, которые могут быть пугающими.

  • Если вы хотите перейти на мобильный, перейдите на С++ Qt

  • Многие типы Qt легко интегрируются в PyQt с использованием собственных форматов Python (списки, строки и т.д.). Если вы используете С++ Qt, вам нужно иметь дело с этим, если вы хотите смешивать чистые С++ и С++ Qt.

    Пример:

    QString str = "foo";
    std::cout << str.toStdString() << std::endl;
    
  • Qt Параллельный модуль недоступен в PyQt из-за того, как он реализован на уровне С++. Если вы хотите больше узнать об этом модуле, вам нужно будет перейти на С++ Qt.

Это лишь некоторые из многих плюсов и минусов обоих. Как отмечали другие, если вы подаете заявку на работу, которая включает Qt, вы наверняка должны быть уверены, что это С++ Qt или PyQt/PySide. Знание одного дает вам отличный обзор его коллеги, но есть различия и мышления "Эй, я знаю PyQt/С++ Qt, поэтому я могу определенно начать с С++ Qt/PyQt, и это не будет проблема вообще" является ошибкой.

Ответ 4

Я перечислил некоторые функции, которые могут помочь вам

  • Поскольку python не поддерживает перегрузку функции, поэтому общее число функций в PyQt меньше, чем в Qt!
  • Qt не поддерживает общий контейнер, такой как QList, вам нужно указать, какой элемент вы хотите сохранить во время компиляции, но python не будет, list() может хранить любой объект.
  • Большинство функций были перенесены из Qt в PyQt, за исключением некоторого контейнера, но некоторые из них не такие, как QMap, в PyQt такого QMap нет.
  • Qt5 поддерживает мобильную разработку, он может работать на Android и iOS, но PyQt в настоящее время не может этого сделать.
  • разработка в Python намного быстрее, чем в С++! Если вы разрабатываете прототип, это действительно быстрее работает с QtDesigner.
  • Лицензия другая!
  • Использование PyQt означает, что у вас много доступных библиотек python, что очень удобно.
  • Оба Qt и PyQt отлично работают на платформе, но Qt лучше поддерживает мобильную платформу.

Ответ 5

Чтобы добавить что-то, о чем еще никто не упоминает, вы также должны взглянуть на Qt QML. Одной из основных причин, по которым я использую PyQt, является гибкость, которую вы получаете, работая с Python. Хотя это совершенно новый способ работы, теперь с QML вы можете получить такую ​​же гибкость, с некоторыми преимуществами, в качестве поддержки кросс-платформы для мобильных устройств.

Ответ 6

QT в Python и С++ в основном одинаковы, а навыки и знания в одном передаются в основном дословно.

Я всегда допускаю свою непосредственную проблему или нуждаюсь в диктовать свои решения. Ваши потребности будут выбирать С++ или Python для вас, исходя из требований. Если у вас нет неотложных потребностей или проблем, я рекомендую PyQt, потому что быстрее узнать PyQt, чем изучать С++ Qt (только из-за сценариев и менее жесткого характера Python).

Я часто копирую Qt-логику между Python и С++.

Я предпочел бы иметь более глубокие знания в одном над другим... так что потенциальные целевые задания также влияют на ваш выбор.

Чтобы ответить на ваш вопрос. Есть несколько минусов использования PyQt над С++/Qt и те, которые упоминаются другими в этом сообщении, хотя и важны, но несущественные IMHO.

Ответ 7

Да, есть несколько недостатков в использовании PyQt из-за различий наследования между С++ и python. Первое, что приходит на ум, чтобы проиллюстрировать это. Предположим, у вас есть виджет с vboxlayout. Если вы хотите изменить этот макет на hboxlayout, вам необходимо: 1) удалить предыдущий макет, потому что вам не разрешено устанавливать макет, когда виджет уже имеет макет 2) создать новый макет 3) назначить новый макет виджету См. Проблему с пунктом 1? Вы не можете просто удалить что-то в python.