Примечание : В этом ответе "Qt Widgets" относится к Приложению Qt Widgets, которое можно выбрать при создании нового приложения Qt.
Это семь летпосле того, как вопрос был впервые опубликован ... но вот мои " цель " два цента, чтобы нейтрализовать любые события с тех пор.
A Refresher
Язык
В проектах Qt Quick используются QML и JavaScript .
В проектах Qt Widgets используется код C ++.(PyQt и PySide, привязки Python для Qt, используют Python.)
Производительность и кодирование
Таким образом, виджеты Qt можно считать низкоуровневыми по сравнению с Qt Quick.Но это подразумевает, что в долгосрочной перспективе проект Qt Widgets будет работать быстрее и иметь лучшую производительность.Быть низкоуровневым может быть хорошо, так как Qt Widgets более открыт для собственного API (модуль QtCore , Таблицы стилей Qt и т. Д.).Тем не менее, он часто используется для разработки десктопов.
Qt Quick больше подходит для разработки на мобильных устройствах (хотя все еще может использоваться для разработки десктопов).Он имеет готовые к использованию всплывающие окна , анимации , вкладки и макеты, фликбэлы , выдвижные ящики и обычные элементы управления;все это вездесуще в мобильной разработке.
Дизайн пользовательского интерфейса
Оба имеют ui
файлы, которые работают с QtDesigner, предоставляя высокоуровневое представление для настройки макетов и создания интерфейсов.(В Qt Quick расширения .ui.qml
. В Qt Widgets они .ui
.) Файлы .ui
не являются обязательными и необязательными: у вас есть выбор делать дизайн и макеты программно, используя QML / JS или C ++ /Python.
Обучение
Если вы полностью новичок в программировании, я предлагаю сначала взглянуть на Qt Quick.Лично я думаю, что Qt Quick имеет более мягкую кривую обучения и с ним легче работать, чтобы выполнить множество проектов.По какой-то причине он называется «Qt Quick ».(Не смотрите свысока на Qt Widgets, хотя у них есть несколько хороших модулей, которые превосходят QtQuick.)
Однако, если вы раньше программировали на C ++ или Python, я бы посоветовал взглянуть на Qt Widgetsво-первых, чтобы привыкнуть к их сигнальным и слот-механизмам и модулям, которые могут вас заинтересовать (например, sql
, network
, gui
) наряду с проектами программирования (например, программирование модели / вида для отображения данных).
Особенно с C ++, большинство не-Qt библиотек, которые обрабатывают события, используют while
-циклы, это не так с Qt.Они используют сигналов и слотов .
В конце концов, даже если вы в основном используете виджеты Qt, вы можете захотеть взглянуть на Qt Quick, поскольку он предлагает высокоуровневый декларативный язык дляработать с и позволяет вам настроить вещи быстрее.(Специально для мобильной разработки.)
Qt предоставляет примеры в изобилии для проектов Qt Quick и Qt Widget , а также forum .Вы не должны беспокоиться о получении помощи в долгосрочной перспективе.(Не забудьте StackOverflow!)
Qt Quick + Qt Widget
До сих пор мы рассматривали их как отдельные объекты.Но возможно интегрировать QML в C ++ .Это позволяет вам использовать Qt Widget, C ++ и другие модули.Например, QtQuick предоставляет TreeView
, но не TreeModel
, который может / должен быть зарегистрирован в QML из C ++.Часто существует разделение проблем шаг, где Qt рекомендует разделять программы на пользовательский интерфейс и логику на QML и C ++ соответственно.
Это также удобно, если, скажем, вам нужен backend для интенсивных запросов SQL, алгоритмов или асинхронных запросов http / xml.Разве это не круто?Интерфейс QML / JS плюс бэкэнд C ++.Полный стек Qt'er.: -)
(То, что я еще не пробовал, у меня есть бэкэнд Python. Я еще не трогал PyQt ...)