Qt Quick против Qt Widget - PullRequest
       20

Qt Quick против Qt Widget

63 голосов
/ 24 декабря 2011

Я новичок в Qt и не совсем понимаю разницу между Qt Quick Project и Qt Widget Project.

Я надеюсь создать программу, которая рисует решетку из шестиугольников, которые пользователь может вращать и сдвигать, а также перемещать и увеличивать и уменьшать масштаб. В конечном итоге это будет MIDI-контроллер. Какой тип проекта будет лучше для этого и почему?

Я надеюсь, что это сработает на настольных и мобильных платформах.

Ответы [ 5 ]

32 голосов
/ 01 февраля 2012

Примечание: Виджеты Qt заменены на Виджеты QML; этот ответ отвечает на заданный вопрос, который сейчас является строго историческим вопросом о старых виджетах Qt.

Qt Quick - это декларативный пользовательский интерфейс в стиле смартфона с поддержкой множества интересных анимационных переходов, которые распространены в приложениях для смартфонов. Быстрый также хороший выбор для быстрой разработки прототипа. Qt Widget - это традиционная модель пользовательского интерфейса, ориентированная на рабочий стол.

Прямо сейчас (до Qt5) поддержка Qt Quick для функций настольной системы отсутствует (но улучшается). В Quick не так много поддержки меню, панелей инструментов, диалогов и других стандартных режимов рабочего стола, в то время как Widget очень хорошо поддерживает эти элементы.

Хотите ли вы, чтобы ваше приложение выглядело и чувствовало себя нативным на настольных и планшетных платформах, или вы создаете простое приложение на основе своего собственного пользовательского интерфейса виджета? Как сказал Мат, если Qt Quick поддерживает нужные вам функции, это, вероятно, будет вашим самым быстрым подходом. Если вы хотите создавать полнофункциональные версии для настольных компьютеров, Qt Widget, вероятно, будет лучшим выбором.

29 голосов
/ 07 ноября 2015

Как человек, который профессионально разрабатывает приложения на qt, я буду выбирать qml вместо виджетов каждый день.

Виджеты хороши для самых простых вещей, но мне однажды вам нужно будет создать что-то более модноеочень скоро виджеты потерпят неудачу.

Qml просто более гибок, вы можете привязывать элементы где угодно, вместо использования ограниченной системы макетов виджетов.Почти нет недостатков в зависимости от платформы, в то время как виджеты полны ими.А система привязки свойств позволяет чертовски легко синхронизировать пользовательский интерфейс с вашей моделью.

13 голосов
/ 12 ноября 2018

Примечание : В этом ответе "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 ...)

5 голосов
/ 15 октября 2014

Во-первых, я думаю, что вы должны начать с Widget. Интерфейс виджета помогает легко изучить qt, если ваши предыдущие опыты касались интерфейсных вещей, которые вы бы легко выучили Quick.

4 голосов
/ 11 июня 2014

Qt Quick по умолчанию - QML, декларативный диалект JSON с включенным встроенным ECMAscript. С помощью виджетов Qt разработчик может создавать таблицы стилей, а разработчик выполняет собственное кодирование C ++.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...