Примечание : В этом ответе «виджеты Qt» относятся к приложению виджетов Qt, которое можно выбрать при создании нового приложения Qt.
Это спустя семь лет после того, как вопрос был впервые опубликован ... но вот моя « цель » - два цента, чтобы нейтрализовать любые события, произошедшие с тех пор.
Напоминание
Язык
В проектах Qt Quick используются QML и JavaScript .
В проектах Qt Widgets используется код C ++. (PyQt и PySide, привязки Python для Qt, использует Python.)
Производительность и кодирование
Таким образом, виджеты Qt можно считать низкоуровневыми по сравнению с Qt Quick. Но это означает, что в конечном итоге проект Qt Widgets будет работать быстрее и иметь лучшую производительность. Однако быть на низком уровне может быть хорошо, поскольку виджеты Qt более доступны для собственного API ( модуль QtCore , таблицы стилей Qt и т. Д.). Тем не менее, он часто используется для разработки настольных компьютеров.
Qt Quick больше ориентирован на разработку мобильных приложений (хотя его все еще можно использовать для разработки настольных компьютеров). Он имеет готовые к использованию всплывающие окна , анимацию , вкладки и макеты, всплывающие элементы , ящики и обычные элементы управления; все повсеместно используются в мобильной разработке.
UI дизайн
У обоих есть ui
файлы, которые работают с QtDesigner, обеспечивая высокоуровневое представление для настройки макетов и создания интерфейсов. (В Qt Quick это расширения .ui.qml
. В виджетах Qt они есть .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
-loops для обработки событий, это не относится к Qt. Они используют сигналы и слоты .
В конце концов, даже если вы в основном используете виджеты Qt, вы можете захотеть взглянуть на Qt Quick, поскольку он предлагает декларативный язык высокого уровня для работы и позволяет вам быстрее настраивать вещи. (Специально для мобильной разработки.)
Qt предоставляет множество примеров для проектов Qt Quick и Qt Widget , а также форум . Вам не стоит беспокоиться о помощи в долгосрочной перспективе. (Не забывайте StackOverflow!)
Qt Quick + Qt Widget
До сих пор мы относились к ним как к отдельным объектам. Но можно интегрировать QML в C ++ . Это позволяет вам использовать Qt Widget, C ++ и другие модули. Например, QtQuick предоставляет, TreeView
но не предоставляет TreeModel
, который может / должен быть зарегистрирован в QML из C ++. Часто существует разделение задач , когда Qt рекомендует разделять программы на пользовательский интерфейс и логику на QML и C ++ соответственно.
Это также пригодится, если, скажем, вам понадобится серверная часть для интенсивных запросов SQL, алгоритмов или асинхронных запросов http / xml. Разве это не круто? Интерфейс QML / JS плюс бэкэнд C ++. Полный стек Qt'er. :-)
(То, что я не пробовал, - это бэкэнд Python. Я еще не касался PyQt ...)