Примітка : У цій відповіді "Qt Widgets" відноситься до програми Qt Widgets, яку можна вибрати під час створення нової програми Qt.
Це сім років після того, як запитання було опубліковано вперше ... але ось мої « цільові » два центи для нейтралізації будь-яких подій з тих пір.
Освіжувач
Мова
Проекти Qt Quick використовують QML та JavaScript .
Проекти Qt Widgets використовують код C ++. (PyQt та PySide, прив'язка Python для Qt, використовує Python.)
Продуктивність та кодування
Таким чином, віджети Qt можна вважати низьким рівнем порівняно з Qt Quick. Але це означає, що в довгостроковій перспективі проект віджетів Qt працюватиме швидше і матиме кращу продуктивність. Хоча низький рівень може бути хорошим, оскільки віджети Qt більш схильні до власного API ( модуль QtCore , таблиці стилів Qt тощо). Тим не менш, він часто використовується для розробки настільних ПК.
Qt Quick більше відповідає розробці мобільних пристроїв (хоча її все ще можна використовувати при розробці настільних ПК). Він має готові до використання спливаючі вікна , анімації , вкладки та макети, значки , шухляди та звичайні елементи управління; всі повсюдні в мобільному розвитку.
Дизайн інтерфейсу користувача
В обох є ui
файли, які працюють з QtDesigner, забезпечуючи високорівневий вигляд для встановлення макетів та створення інтерфейсів. (У Qt Quick розширення є.ui.qml
. У віджетах Qt вони є .ui
.) .ui
Файли не є ні обов'язковими, ні необхідними: вам залишається на вибір робити програмне оформлення та макети за допомогою QML / JS або C ++ / Python.
Навчання
Якщо ви зовсім не новачок у програмуванні, я пропоную спочатку поглянути на Qt Quick. Особисто я думаю, що Qt Quick має більш ніжну криву навчання і з нею легше працювати, щоб здійснити безліч проектів. Це називається "Qt Quick " неспроста. (Не дивіться на віджети Qt, однак, у них є кілька приємних модулів, які перевершують QtQuick.)
Однак, якщо ви були програмування з допомогою C ++ або Python раніше, я б запропонував поглянути на Qt Widgets першим, щоб звикнути до їх механізму сигналів і слотів і модулів , які можуть зацікавити вас (наприклад sql
, network
, gui
) поряд з програмуванням конструкцій (наприклад , програмування моделі / подання для відображення даних).
Особливо для C ++, більшість бібліотек, що не належать до Qt, які використовують обробку подій із використанням while
циклів, це не стосується Qt. Вони використовують сигнали та слоти .
Зрештою, навіть якщо ви в основному використовуєте віджети Qt, можливо, вам захочеться подивитися на Qt Quick, оскільки він пропонує декларативну мову високого рівня для роботи та дозволяє швидше налаштовувати ситуацію. (Особливо для мобільних розробок.)
Qt надає безліч прикладів як для проектів Qt Quick, так і для Qt Widget , а також форуму . Вам не слід турбуватися про отримання допомоги в довгостроковій перспективі. (Не забудьте StackOverflow!)
Qt Quick + Qt Віджет
Дотепер ми ставились до них як до окремих сутностей. Але можливо інтегрувати QML в C ++ . Це дозволяє скористатися перевагами Qt Widget, C ++ та інших модулів. Наприклад, QtQuick надає, TreeView
але не a TreeModel
, яке можна / слід зареєструвати в QML із C ++. Часто існує поділ висоти проблем , де Qt рекомендує розділяти програми на інтерфейс та логіку відповідно на QML та C ++.
Це також стане в нагоді, якщо, скажімо, вам потрібна серверна частина для інтенсивних запитів SQL, алгоритмів або асинхронних запитів http / xml. Хіба це не круто? Інтерфейс QML / JS плюс серверний сервер C ++. Повний стек Qt'er. :-)
(Те, що я ще не пробував, - це наявність бекенда Python. Я ще не торкався PyQt ...)