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

Qt Quick vs. Qt Widget

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

Примечание. В этом ответе "Qt Widgets" относится к Приложению Qt Widgets, которое можно выбрать при создании нового приложения Qt.

Это спустя семь лет после того, как вопрос был впервые опубликован... но здесь моя цель - два цента, чтобы нейтрализовать любые события с тех пор.

Освежающий

язык

В проектах Qt Quick используются QML и JavaScript.

Проекты Qt Widgets используют код C++ (или там также Python в PyQt/PySide).

Производительность и кодирование

Таким образом, виджеты Qt можно считать низкоуровневыми по сравнению с Qt Quick. Но это подразумевает, что в долгосрочной перспективе проект Qt Widgets будет работать быстрее и иметь лучшую производительность. Быть низкоуровневым может быть хорошо, так как Qt Widgets более открыт для нативного API (модуль QtCore, QtStyleSheets и т.д.). Тем не менее, большинство предпочтут Qt Widgets для разработки десктопов.

Вместе с тем, C++/Python намного строже, чем JS. Это может быть хорошо, так как у вас больше свободы. (QtCreator действительно выдает предупреждения, так что это не должно быть недостатком. Просто не забывайте писать чистый код, а не спагетти.)

Qt Quick обслуживает мобильную разработку (ее все еще можно использовать в разработке для настольных компьютеров). Он имеет готовые к использованию всплывающие окна (эти перетаскиваемые боковые панели), анимации, представления вкладок, элементы быстрого доступа и обычные кнопки, ползунки и индикаторы выполнения; все для ускорения разработки мобильных приложений.

UI Design

Оба имеют файлы пользовательского ui которые работают с QtDesigner, предоставляя высокоуровневый интерфейс для настройки макетов, создания интерфейсов и т.д. (В Qt Quick это *.ui.qml. В Qt Widgets это *.ui.) Вы можете также сделайте это программно, используя QML/JS или C++, чтобы .ui не обязательно был обязательным.

Учусь

Если вы совершенно новичок в программировании, я советую сначала взглянуть на Qt Quick. Лично я думаю, что Qt Quick имеет более мягкую кривую обучения и с ним легче работать, чтобы выполнить множество проектов. ИМХО, он называется "Qt Quick", и это связано с тем, что обычно требуется меньше кода, необходимого для выполнения задачи или дизайна, что позволяет вам быстро использовать любую магию, которую вы планируете. (Не смотрите свысока на QtWidgets, у них есть несколько хороших модулей, которые превосходят QtQuick.)

Однако, если вы раньше программировали на C++ или Python, я бы посоветовал сначала взглянуть на виджеты Qt, чтобы привыкнуть к их механизму signals/slot и любым модулям, которые у них есть (например, sql, webengine, gui) наряду с программирование конструкций (например, программирование модели/вида для отображения таблиц или данных).

Особенно с C++, большинство не-Qt библиотек, которые используют обработку событий, в while -loops, это не относится к Qt. Они используют сигналы и слоты.

В конце концов, даже если вы в основном используете виджеты Qt, возможно, вы захотите взглянуть на Qt Quick, так как он предлагает язык высокого уровня для работы и позволяет быстрее настраивать параметры. (Особенно для мобильной разработки.)

Qt предоставляет примеры в изобилии для проектов Qt Quick и Qt Widget вместе с активным форумом. Так что вам не стоит беспокоиться о получении помощи в долгосрочной перспективе. (Не забудьте StackOverflow!)

Комбинация

Обратите внимание, что существует также возможность интеграции QML с C++. Это позволяет вам использовать функциональные возможности Qt Widget и C++. (Например, QtQuick предоставляет TreeView но не TreeModel, модель должна быть зарегистрирована в QML из C++.)

Это также удобно, если, скажем, вам нужен бэкэнд для интенсивных запросов SQL или запросов http/xml. Разве это не круто? Фронтенд QML/JS плюс бэкэнд C++. Полный стек Qt'er. :-)

(То, что я еще не пробовал, это бэкэнд Python. Я еще не трогал PyQt...)