Qt Quick vs Qt Widget [закрито]


81

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

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

Я сподіваюся, що це буде працювати як на настільних, так і на мобільних платформах.


3
Потратьте трохи часу на веб-сайті Qt Quick і перегляньте приклади. Якщо це те, що вам потрібно, використовуйте це. Якщо ні, отримайте для звичайного проекту віджетів Qt, але мобільні платформи можуть бути проблемою.
Mat

Оновлене посилання для коментаря Мата doc.qt.io/qt-5/qtquick-index.html
Айшан Хакверділі

Відповіді:


39

Примітка: Віджети Qt замінено віджетами QML; ця відповідь відповідає на поставлене запитання, яке тепер є суто історичним питанням про старі віджети Qt.

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

Зараз (до Qt5) Qt Quick підтримка функцій настільної системи відсутня (але вдосконалюється). У Quick не існує стільки підтримки меню, панелей інструментів, діалогів та інших стандартних способів поведінки робочого столу, тоді як Widget надзвичайно добре підтримує ці елементи.

Ви хочете, щоб ваш додаток виглядав рідним на настільних та планшетних платформах, або ви створюєте просту програму навколо власного віджета інтерфейсу користувача? Як сказав Мет, якщо Qt Quick підтримує потрібні вам функції, це, мабуть, буде вашим найшвидшим підходом. Якщо ви хочете створити повнофункціональні настільні версії, Qt Widget - це, мабуть, найкращий вибір.


1
Я хотів би і того, і іншого. :) Використовуємо віджет Qt.
Ентоні

10
Цю відповідь слід або видалити, відредагувати або проголосувати проти, оскільки ми зараз знаходимося у дописі Qt 5.0, ми навіть наближаємося до 6.0, а віджети Qt були замінені віджетами QML.
Аріель М.

15
QML НЕ є заміною віджетів Qt, навіть зараз у 2019 році, принаймні, поки він не замінить такі проекти, як Qwt, QCustomPlot та купу інших, що, здається, не так. До тих пір, поки це не просто інший спосіб реалізації, не більше не менше.
Ендрі

1
@Ariel M. Qt Widgets не замінюється і не може бути, принаймні, поки все не буде переписано, що не так.
Ендрі

1
Qwt та QCustomPlot - це сторонні проекти, а не частина QtWidgets, тому не має значення, якщо вони перенесені чи ні. Крім того, Ентоні новачок і запитував про створення MIDI-контролера, де був би необхідний спеціально налаштований інтерфейс (див. Arena, Lemur PS Elements та подібне програмне забезпечення). QML - це шлях.
Аріель М.

37

Як хтось, хто професійно розробляє додатки qt, я буду вибирати qml замість віджетів щодня.

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

Qml просто набагато гнучкіший, ви можете закріпити елементи куди завгодно, замість того, щоб використовувати обмежену систему макетів віджетів. Вад у залежності від платформи майже немає, тоді як віджети наповнені цими. А система прив’язки властивостей дозволяє настільки просто синхронізувати ваш інтерфейс із вашою моделлю.


3
Дякую! Я просто вирішив розпочати з QML / QtQuick, виходячи з вашого професійного досвіду, зазначеного у вашій відповіді. Просто зрозумійте, що я можу легко використовувати * .ui.qml від QtCreator і використовувати його безпосередньо в PyQt. Вирішив моє початкове налаштування Python + QtQuick!
swdev

2
Використання QtQuick для складних настільних програм - погана ідея у продуктивності ...
Yousha Aleayoub

Можливо, ви недостатньо досвідчені з API макетів? Будь-який приклад того, що ви можете робити з QML, а чого не можна робити з віджетами? Я працюю з Qt над програмами з 10 тисячами користувачів у всьому світі більше 5 років, і ми використовуємо віджети, оскільки лише вони забезпечують необмежену потужність. QML підходить для прототипів та невеликих проектів. І так, продуктивність має значення. Крім того, оскільки QML керується OpenGL, це пробка для показу, якщо ваша база даних повна старого обладнання.
Даламбер

37

Примітка : У цій відповіді "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 ...)


7

Qt Швидкий за замовчуванням QML, JSON-декларативний діалект з увімкненим вбудованим ECMAscript. За допомогою віджетів Qt дизайнер може створювати таблиці стилів, а розробник виконує власне кодування на C ++.

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


5

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.