Журнал LinuxFormat - перейти на главную

LXF134:Что за штука

Материал из Linuxformat
Перейти к: навигация, поиск

Что за штука… Qt Quick?

Бро­сок Clutter к вла­сти был ре­зок, но вы­бить Nokia с рын­ка ин­тер­фей­сов для мо­биль­ных уст­ройств не так-то про­сто, счи­та­ет Пол Хад­сон.
  • Стоп-стоп... я сро­ду не слы­хал ни о ка­ком Clutter. К вла­сти, го­во­ри­те, бро­сал­ся?
Clutter та­кая шту­ка, что о нем не обя­за­тель­но слы­шать – он ра­бо­та­ет на заднем плане; но ра­бо­та­ет гран­ди­оз­но!
  • Что же это та­кое?
Это па­кет ин­ст­ру­мен­тов для ра­бо­ты с гра­фи­кой: с его по­мо­щью мож­но ри­со­вать на эк­ране фи­гу­ры и за­став­лять их дви­гать­ся.
  • Не ви­жу ниче­го осо­бен­но­го.
А на­до бы! Clutter ра­бо­та­ет че­рез OpenGL, ко­то­рый вы­да­ёт уди­ви­тель­но плав­ную гра­фи­ку да­же на ма­ло­мощ­ном обо­ру­до­вании. За­ста­вить объ­ек­ты дви­гать­ся не так-то про­сто, а Clutter за­про­сто справ­ля­ет­ся с анима­ци­ей: мас­шта­би­ру­ет, вра­ща­ет и дви­га­ет фи­гу­ры на эк­ране.
  • И рвал­ся к вла­сти?
О да! В Ubuntu Netbook Remix Clutter ис­поль­зу­ет­ся для под­держ­ки чуд­ных ин­тер­фей­сов на де­ше­вых чип­се­тах Intel, при­ме­няе­мых в нетбу­ках. На систе­мах Moblin Clutter при­ме­ня­ет­ся по тем же при­чи­нам: весь функ­цио­нал OpenGL мож­но реа­ли­зо­вать на обо­ру­до­вании c низкой производительностью.
  • Ми­ну­точ­ку... не в этом ли жур­на­ле я чи­тал, что Clutter уб­ра­ли из по­следней вер­сии Moblin в этом... как его?
MeeGo. Вы пра­вы, Intel и Nokia ре­ши­ли объ­е­динить про­ек­ты Moblin и Maemo, и Clutter остал­ся не у дел. Че­ст­но го­во­ря, жаль: Clutter успел со­брать до­воль­но мощ­ную «груп­пу под­держ­ки».
  • А на что его за­менили?
Пред­ска­зуе­мо – на Qt, соб­ствен­ную тех­но­ло­гию Nokia. Прав­да, есть неко­то­рая за­гвозд­ка: Qt пре­крас­но ра­бо­та­ет на Mac, Windows, Linux и да­же мел­ких уст­рой­ствах Symbian, но оста­ёт­ся тра­ди­ци­он­ным на­бо­ром ин­тер­фей­са поль­зо­ва­те­ля – с кноп­ка­ми, ме­ню, пол­зун­ка­ми и флаж­ка­ми. В Clutter всё дру­гое: про­сто гру­зит­ся кар­тин­ка, гру­зит­ся текст, и всё это дви­жет­ся. По­это­му ин­тер­фей­сы на осно­ве Clutter вы­гля­дят слов­но соз­дан­ные ху­дожника­ми: сплош­ные кар­тин­ки и муль­ти­ки.
  • Да чем плох стан­дарт­ный на­бор? Мне нра­вит­ся еди­но­об­ра­зие ин­тер­фей­сов в при­ло­жениях.
Здесь есть свои «за» и «про­тив». Конеч­но, со стан­дарт­ным ин­ст­ру­мен­та­ри­ем все при­ло­жения бу­дут по­хо­жи­ми – но по­че­му, ска­жем, F-Spot дол­жен быть по­хож на OpenOffice.org? Ра­бо­та в Clutter все­гда на­чи­на­ет­ся с чисто­го листа: вы до­бав­ля­е­те свои объ­ек­ты и за­став­ляе­те их де­лать что вам на­до. С Qt вы про­сто поль­зуе­тесь – ну, или поль­зо­ва­лись – стан­дарт­ны­ми вид­же­та­ми Qt. Да­же са­мые рас­пре­крас­ные те­мы всё рав­но оста­ют­ся стан­дарт­ны­ми вид­же­та­ми Qt.
  • Здесь-то и по­яв­ля­ет­ся Qt Quick?
Да! Qt Quick на­сле­ду­ет класс­ные идеи Clutter и внедря­ет их в жизнь. По­это­му в ка­че­стве осно­вы про­грам­мист по­лу­чит вид­же­ты – пря­мо­угольники, изо­бра­жения и текст – а ещё таб­ли­цы, ви­део, жес­ты и да­же встро­ен­ный web-брау­зер на базе WebKit.
  • Нуж­на ли нам ещё од­на биб­лио­те­ка поль­зо­ва­тель­ско­го ин­тер­фей­са? Ме­ня дав­но уж бе­сит, что GTK-при­ло­жения пло­хо впи­сы­ва­ют­ся в мой ра­бо­чий стол Qt.
Тут-то и на­чи­на­ет­ся ин­те­рес­ное: Qt при­сут­ст­ву­ет в на­звании по­то­му, что Qt Quick на Qt и по­стро­ен – ему не на­до за­гру­жать осо­бые биб­лио­те­ки, и на фоне Qt-при­ло­жений он вы­гля­дит вполне уме­ст­но. По су­ти, Quick – от­де­лоч­ный слой, ко­то­рый ис­поль­зу­ет на­чин­ку Qt и при­да­ёт ему новый шарм.
  • Так это все­го лишь Qt? А шу­ма-то!
Вам всё станет яс­но, когда вы раз­бе­рё­тесь, из че­го со­сто­ит Qt Quick. Как я и ска­зал, Qt со­став­ля­ет его осно­ву: он кросс­плат­фор­мен­ный, он об­ла­да­ет всей мо­щью рен­де­рин­га Qt, и при же­лании вы мо­же­те восполь­зо­вать­ся всем функ­цио­наль­ным бо­гат­ством Qt. Вто­рая важ­ная со­став­ляю­щая – Qt Creator, кон­ст­рук­тор ин­тер­фей­сов для Qt, с ко­то­рым ин­тер­фейс мож­но соз­да­вать, про­сто пе­ре­таски­вая эле­мен­ты. Quick до­ба­вил лоска, но основ­ная идея не ме­ня­ет­ся: вы на­ки­ды­вае­те в ин­тер­фейс изо­бра­жения и про­чие шту­ки, а за­тем на­де­ляе­те их функ­цио­наль­но­стью.
  • Вро­де по­следней вер­си­ей Qt бы­ла 4.6. Что но­во­го? Где там встав­лен Quick?
Тре­тья опо­ра тре­ножника Quick на­зы­ва­ет­ся QML, что оз­на­ча­ет Qt Meta-Object Library и зву­чит страш­нее, чем яв­ля­ет­ся по су­ти. А ес­ли по­про­сту, QML по­зво­ля­ет соз­да­вать поль­зо­ва­тель­ские ин­тер­фей­сы с по­мо­щью про­стых тек­сто­вых опи­саний объ­ек­тов ва­ше­го ок­на. Поч­ти как при соз­дании CSS: что­бы оп­ре­де­лить кон­фи­гу­ра­цию, раз­мер, цвет и про­чие ат­ри­бу­ты объ­ек­та, доста­точ­но опи­сать его «пра­виль­ны­ми» сло­ва­ми. Есте­ствен­но, в окне кон­ст­рук­то­ра Qt Creator всё это генери­ру­ет­ся за вас. Оста­ёт­ся до­ба­вить JavaScript-по­доб­ный код, что­бы по­лу­чить необ­хо­ди­мую функ­цио­наль­ность.
  • Ну и что здесь ре­во­лю­ци­он­но­го? В GTK то­же соз­да­ют ин­тер­фей­сы с по­мо­щью XML. По мне, текст вез­де текст.
Вер­но, но как на­счет воз­мож­но­сти под­це­пить функ­цио­наль­ность пря­мо к ко­ду Quick?
  • Жуть кош­мар­ная! Па­ру лет на­зад я про­бо­вал Qt, но C++ ме­ня до­ко­нал.
Со­гла­сен, Qt по­рой бы­ва­ет жут­ко­ват. Точнее, частень­ко бы­ва­ет, ха-ха. Но, как я уже го­во­рил, Quick – де­ло иное. Здесь ис­поль­зу­ет­ся ин­ст­ру­мент QtDeclarative (ещё од­но не в ме­ру уст­ра­шаю­щее на­звание). Он дей­ству­ет так: вы не опи­сы­вае­те дей­ствия объ­ек­тов, а «го­во­ри­те» объ­ек­там, че­го хо­ти­те от них, а они уж са­ми «ду­ма­ют», как это сде­лать.
  • Я уже сто лет так де­лаю! Го­во­рю: «Хва­тит жрать ОЗУ, Firefox!» — а он не слу­ша­ет...
Увы, за­кли­нания против ПО бе­ссильны. А вот QtDeclarative ра­бо­та­ет: вы го­во­ри­те, ку­да вставить объ­ек­ты, и там они и раз­ме­ща­ют­ся. Ес­ли на­до, что­бы объ­ект пе­ре­во­ра­чи­вал­ся при на­ве­дении кур­со­ра, доста­точ­но ука­зать ис­ход­ное (ли­це­вая сто­ро­на) и ито­го­вое со­стояние (из­нан­ка) и свя­зать это пре­об­ра­зо­вание с со­бы­ти­ем – на­ве­дением кур­со­ра. Анима­цию QtDeclarative бе­рёт на се­бя. Объ­ек­ты мож­но дви­гать, вра­щать, мас­шта­би­ро­вать, пе­ре­кра­ши­вать – мож­но да­же за­дать вре­мя анима­ции или по хо­ду ме­нять её ско­рость.
  • И вправ­ду про­сто. При­чём ника­ко­го C++ — это во­об­ще от­лич­но!
C++ нику­да не дел­ся: ведь Quick ба­зи­ру­ет­ся на Qt, а тот, в свою оче­редь, на C++; но C++ уп­ря­тан вглубь. И это непло­хо: ес­ли вам ма­ло функ­ций, пред­ла­гае­мых Quick, мож­но вер­нуть­ся к связ­ке C++ и Qt. Qt го­тов к ис­поль­зо­ванию: при же­лании мож­но кон­вер­ти­ро­вать всё при­ло­жение в стан­дарт­ный Qt – а мож­но до­бав­лять его ку­соч­ка­ми там и тут, по вку­су. В Qt есть класс C++ под на­званием QtDeclarativeView, и с его по­мо­щью мож­но чи­тать QML и про­из­воль­но манипу­ли­ро­вать им.
  • О нет, C++ луч­ше не тро­гать, уп­ря­та­ли — и лад­но.
Глав­ное, что у вас есть вы­бор. Хо­ти­те поль­зо­вать­ся QtDeclarative – по­жа­луй­ста. Хо­ти­те спустить­ся в C++ – к ва­шим услу­гам. А мож­но их со­че­тать – то­же ра­бо­та­ет; ре­шать вам.
  • Так, ру­ки уже че­шут­ся по­про­бо­вать. Что на­до за­пустить?
Боль­шой недоста­ток Quick – он бу­дет досту­пен толь­ко в Qt 4.7, ко­то­рый сей­час находит­ся в стадии раз­ра­бот­ки у Nokia. Есть основания на­де­яться, что вы­пуск со­сто­ит­ся в бли­жай­шие несколь­ко недель, тогда и по­про­буе­те. Qt 4.7 вклю­ча­ет Qt Creator 2.1 с под­держ­кой QML – и вы сможете уз­на­ть, как стря­паются ин­тер­фей­сы пе­ре­таски­ванием.
  • А мож­но по­чи­тать об этом, что­бы слег­ка под­го­то­вить­ся?
Конеч­но! Луч­ше все­го на­чать с http://doc.qt.nokia.com/4.7‑snapshot/declarativeui.html – там опи­са­ны раз­лич­ные функ­ции, со­б­ра­но несколь­ко ру­ко­водств и да­же при­ве­де­но несколь­ко при­ме­ров со­пря­жения QML и C++.
Персональные инструменты
купить
подписаться
Яндекс.Метрика