IntroductionQtQuick/bg: Difference between revisions
No edit summary |
AutoSpider (talk | contribs) (Remove non-functioning "toc" command) |
||
(7 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Cleanup | reason=Auto-imported from ExpressionEngine.}} | |||
[[Category:Developing_with_Qt::Qt Quick]] | |||
[[Category:Developing_with_Qt::Qt Quick::Tutorial]] | |||
'''Български''' [[:IntroductionQtQuick|English]] [[IntroductionQtQuick_Russian|Русский]] | |||
= Въведение в Qt Quick = | |||
== | == За Qt Quick == | ||
Потребителски интерфейси, разработени в Qt Quick се създават като правоъгълни елементи във визуални дървета. Технологията е ограничена до набор от елементи, фокусирайки се върху взаимодействия чрез докосване и жестове. Qt Quick въвежда нова концепция за моделиране на логиката в приложението чрез йерархични стейт машини. Освен това преходи и богат набор от анимации([http://en.wikipedia.org/wiki/Tweening tweens]), спомогат за лесното създаване на привлекателни и удобни интерфейси. | |||
Въпреки, че уеб разработчиците по-често гледат на себе си като дизайнери, а за повечето софтуерни разработчици програмирането е изкуство, все още има голяма празина да се прескачи, ако дизайнерите искат да участват в процеса на разработка с Qt и C+''. C, все пак, е език от ниско ниво, насочен към системното програмиране и програмирането за вградени системи. Qt Quick бе разработен, точно за да запълни тази празнина. Неговата цел е разработката на потребителски интерфейси. Той поставя декларативен слой над JavaScript, който прилича на Cascading Style Sheets (CSS). Така няма да ви се налага да се притеснявате много за преобразуване на типове, указатели или живот на обектите. Вместо това фокусът пада върху създаването на привлекателни и удобни потребителски интерфейси. | |||
== Терминология == | |||
Преди да започнем да работим с Qt Quick, нека си изясним някои термини. Изглежда, че всички говорят за Qt Quick тези дни, и тъй като технологията все още е нова, има много неясноти около нея. | Преди да започнем да работим с Qt Quick, нека си изясним някои термини. Изглежда, че всички говорят за Qt Quick тези дни, и тъй като технологията все още е нова, има много неясноти около нея. | ||
Преди всичко, Qt Quick, QtQuick и | Преди всичко, Qt Quick, QtQuick и QML са различни неща! Qt Quick и QML често се използват като взаимозаменяеми, което не е съвсем правилно. QML е езикът, QtQuick (без интервал) е името на стандартната библиотека, а Qt Quick (с интервал) се отнася до технологията като цяло. QML като език, дава възможност за деклариране на йерархии от обекти и логиката, базирана на стейт машини. Той може да се използва и в други области освен дизайна на потребителския интерфейс. | ||
==Инсталиране и настройване на среда за разработка== | == Инсталиране и настройване на среда за разработка == | ||
Започвайки от версия 4.7, Qt идва с Qt Quick. Можете да редактирате QML файлове с любимия си редактор, но Qt Creator ви предлага повече възможности. Qt също така предоставя и новия инструмент "qmlviewer", който ви позволява да изпълнявате QML файлове. Започвайки от версия 2.1, Qt Creator поддържа специален режим за дизайн на QML. В зависимост от това за коя платформа ще разработвате, можете да си изберете какво да се инсталира. Qt Quick също така е включен в последните SDK на Nokia и Meego/AppUp. Друг вариант е да инсталирате на Qt с любимият си пакетен миниджър и да настроите вашия редактор да оцветява QML файловете ('''. qml) като JavaScript или CSS. От Маверик ( Убунту 10.10), Qt 4.7 и qmlviewer са включени като пакетите ''libqt4-dev'' и ''qt4-qmlviewer''. | |||
== Пример == | |||
Ще започнем с най-проста програма, показваща известното съобщение "Hello, world!". За да стартирате файла, бъдете сигурни, че имате инсталиран ''qmlviewer''. Това лесно може да се тества като напишете в конзолата "qmlviewr —v". Ако искате да използвате QtCreator, просто изберете ''File-> New File or Project-> Qt Quick Project-> Qt Quick UI''. Поставете изходния код и натиснете върху големият триъгълен бутон в долния ляв ъгъл или използвайте клавишната комбинация ''Ctrl+R''. | |||
<code> | |||
// HelloWorld.qml | |||
import QtQuick 1.0 | |||
Rectangle { | |||
color: "beige" | |||
width: 100; height: 100 | |||
Text { | |||
anchors.centerIn: parent | |||
color: "chocolate" | |||
text: "Hello, world!" | |||
} | |||
MouseArea { | |||
anchors.fill: parent | |||
onClicked: Qt.quit() | |||
} | |||
} | |||
</code> | |||
Първият ред е само коментар. Синтаксисът е същият както в C + ''. Линии, започващи с ''/ /'' и текст, затворен в ''/ * … * /'' се игнорират. Втората линия вмъква стандартната библиотека с всички компоненти по подразбиране: ''Rectangle'', ''Image'', ''Text'', ''MouseArea'', ''Flickable'', … и т.н. Третият ред създава главния елемент на нашата визуална йерархия. ''Rectangle'' елемента просто показва правоъгълник, изпълнен с определен цвят и евентуално заоблени ръбове. За цвят може да се използва всяко от имената на цветове в SVG или да се посочи директно RGB код. В нашия пример бихме могли да използваме ''#F5F5DC'' вместо "beige"(бежово). Размерите на правоъгълника са зададени със свойствата ''width'' и ''height''. За всеки визуален елемент можете да укажете геометрията му чрез ''x'', ''y'', ''width'' и ''height'' в брой на пиксели. Най-често това е необходимо само за елемента от най-високо ниво и за анимираните елементи. | |||
След това добавяме два дъщерни елемента: ''Text'' и ''MouseArea''. За да ги поставим, където искаме, използваме "anchors" (котви). Центърът на текста е закотвен в центъра на родителя. Опитайте да преоразмерите прозореца, за да се проверите това. Вторият елемент е ''MouseArea'', който е закотвен, така че напълно да препокрие родителския елемент. MouseArea е един от невидимите елементи за прихващане на действия от потребителя. Той се нарича ''MouseArea'', но също така засича и допир на устройства със сензорен екран. Накрая ''MouseArea'' започва да слуша за събитието ''onClicked'', което извиква функция за изключване на Qt Quick приложението. | |||
== Езика QML == | |||
QML е декларативен език, който описва йерархия от обекти. Дървото на обектите се създава при зареждане на QML файла. И на всеки обект се присвояват стойности на неговите свойства. Свойствата се изчисляват чрез константи или JavaScript изрази. Свойствата, дадени като израз на JavaScript изрази, се преизчисляват, ако някое от свойствата, използвано в израза, се промени. Тази концепция за деклариране на свойства, които зависят едно от друго и се обновяват на момента, се нарича '''обвързване на свойствата''' ('''property binding'''). | |||
QML се смята за разширение на JavaScript, но той всъщност е и подобрение. Докато JavaScript е ""патешки" език":en.wikipedia.org http://en.wikipedia.org/wiki/Duck_typing , QML прави проверка на основните типове и проверка на синтаксиса при зареждане на .qml файловете. Опитайте например следното: | |||
<code> | |||
import QtQuick 1.0 | |||
Rectangle { | |||
color: 0 | |||
} | |||
</code> | |||
При зареждането на този файл в ''qmlviewer'' ще получите несъответствие на тип: | При зареждането на този файл в ''qmlviewer'' ще получите несъответствие на тип: | ||
<code> | |||
file:///home/frank/gitorious/qml-demos/MyRectangle.qml:3:12: Invalid property assignment: color expected | |||
color: 0 | |||
</code> | |||
Освен това в QML не ви е позволено да променяте глобален обект. Това често се случва по случайност, когато забравите да декларирате локална променлива с помощта на var. | |||
Освен тези малки подобрения, JavaScript синтаксисa е напълно съвместим с JavaScript-а, използван в уеб браузърите. Можете да използвате вградените обекти като ''Date'', ''Number'' или ''Math''. Можете да пишете JavaScript код в отделни файлове и да ги импортирате в QML. Можете също така да деклариратe JavaScript функции в рамките на вашите компоненти. Обърнете внимание на следния пример: | |||
<code> | |||
import QtQuick 1.0 | |||
Rectangle { | |||
width: 100; height: 100 | |||
color: red(0.5) | |||
Rectangle { | |||
anchors.verticalCenter: parent.verticalCenter | |||
width: parent.width / 2 | |||
height: parent.height / 2 | |||
color: red(1.) | |||
} | |||
function red(v) { return '#''' Math.floor(v''' 255).toString(16)'' '0000'; } | |||
} | |||
</code> | |||
'' | Тук имаме обявена функцията ''red'' за изчисляване на червени тонове. | ||
== | == Стандартни компоненти в Qt Quick == | ||
''QtQuick'' библиотеката предоставя богат набор от анимации, елементи за показване на изображения, елементи за въвеждане на данни и ''Model-View'' елементи. Има възможност за подреждане на елементите чрез закотвяне и позициониращи елементи, но няма компоненти от високо ниво като бутони или ленти с инструменти. В момента се разработват така наречените [http://developer.qt.nokia.com/wiki/Qt_Quick_Components Qt Components] за предоставяне на такива компоненти. | |||
Latest revision as of 12:24, 17 April 2015
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine. Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean. |
Въведение в Qt Quick
За Qt Quick
Потребителски интерфейси, разработени в Qt Quick се създават като правоъгълни елементи във визуални дървета. Технологията е ограничена до набор от елементи, фокусирайки се върху взаимодействия чрез докосване и жестове. Qt Quick въвежда нова концепция за моделиране на логиката в приложението чрез йерархични стейт машини. Освен това преходи и богат набор от анимации(tweens), спомогат за лесното създаване на привлекателни и удобни интерфейси.
Въпреки, че уеб разработчиците по-често гледат на себе си като дизайнери, а за повечето софтуерни разработчици програмирането е изкуство, все още има голяма празина да се прескачи, ако дизайнерите искат да участват в процеса на разработка с Qt и C+. C, все пак, е език от ниско ниво, насочен към системното програмиране и програмирането за вградени системи. Qt Quick бе разработен, точно за да запълни тази празнина. Неговата цел е разработката на потребителски интерфейси. Той поставя декларативен слой над JavaScript, който прилича на Cascading Style Sheets (CSS). Така няма да ви се налага да се притеснявате много за преобразуване на типове, указатели или живот на обектите. Вместо това фокусът пада върху създаването на привлекателни и удобни потребителски интерфейси.
Терминология
Преди да започнем да работим с Qt Quick, нека си изясним някои термини. Изглежда, че всички говорят за Qt Quick тези дни, и тъй като технологията все още е нова, има много неясноти около нея.
Преди всичко, Qt Quick, QtQuick и QML са различни неща! Qt Quick и QML често се използват като взаимозаменяеми, което не е съвсем правилно. QML е езикът, QtQuick (без интервал) е името на стандартната библиотека, а Qt Quick (с интервал) се отнася до технологията като цяло. QML като език, дава възможност за деклариране на йерархии от обекти и логиката, базирана на стейт машини. Той може да се използва и в други области освен дизайна на потребителския интерфейс.
Инсталиране и настройване на среда за разработка
Започвайки от версия 4.7, Qt идва с Qt Quick. Можете да редактирате QML файлове с любимия си редактор, но Qt Creator ви предлага повече възможности. Qt също така предоставя и новия инструмент "qmlviewer", който ви позволява да изпълнявате QML файлове. Започвайки от версия 2.1, Qt Creator поддържа специален режим за дизайн на QML. В зависимост от това за коя платформа ще разработвате, можете да си изберете какво да се инсталира. Qt Quick също така е включен в последните SDK на Nokia и Meego/AppUp. Друг вариант е да инсталирате на Qt с любимият си пакетен миниджър и да настроите вашия редактор да оцветява QML файловете (. qml) като JavaScript или CSS. От Маверик ( Убунту 10.10), Qt 4.7 и qmlviewer са включени като пакетите libqt4-dev и qt4-qmlviewer.
Пример
Ще започнем с най-проста програма, показваща известното съобщение "Hello, world!". За да стартирате файла, бъдете сигурни, че имате инсталиран qmlviewer. Това лесно може да се тества като напишете в конзолата "qmlviewr —v". Ако искате да използвате QtCreator, просто изберете File-> New File or Project-> Qt Quick Project-> Qt Quick UI. Поставете изходния код и натиснете върху големият триъгълен бутон в долния ляв ъгъл или използвайте клавишната комбинация Ctrl+R.
// HelloWorld.qml
import QtQuick 1.0
Rectangle {
color: "beige"
width: 100; height: 100
Text {
anchors.centerIn: parent
color: "chocolate"
text: "Hello, world!"
}
MouseArea {
anchors.fill: parent
onClicked: Qt.quit()
}
}
Първият ред е само коментар. Синтаксисът е същият както в C + . Линии, започващи с / / и текст, затворен в / * … * / се игнорират. Втората линия вмъква стандартната библиотека с всички компоненти по подразбиране: Rectangle, Image, Text, MouseArea, Flickable, … и т.н. Третият ред създава главния елемент на нашата визуална йерархия. Rectangle елемента просто показва правоъгълник, изпълнен с определен цвят и евентуално заоблени ръбове. За цвят може да се използва всяко от имената на цветове в SVG или да се посочи директно RGB код. В нашия пример бихме могли да използваме #F5F5DC вместо "beige"(бежово). Размерите на правоъгълника са зададени със свойствата width и height. За всеки визуален елемент можете да укажете геометрията му чрез x, y, width и height в брой на пиксели. Най-често това е необходимо само за елемента от най-високо ниво и за анимираните елементи. След това добавяме два дъщерни елемента: Text и MouseArea. За да ги поставим, където искаме, използваме "anchors" (котви). Центърът на текста е закотвен в центъра на родителя. Опитайте да преоразмерите прозореца, за да се проверите това. Вторият елемент е MouseArea, който е закотвен, така че напълно да препокрие родителския елемент. MouseArea е един от невидимите елементи за прихващане на действия от потребителя. Той се нарича MouseArea, но също така засича и допир на устройства със сензорен екран. Накрая MouseArea започва да слуша за събитието onClicked, което извиква функция за изключване на Qt Quick приложението.
Езика QML
QML е декларативен език, който описва йерархия от обекти. Дървото на обектите се създава при зареждане на QML файла. И на всеки обект се присвояват стойности на неговите свойства. Свойствата се изчисляват чрез константи или JavaScript изрази. Свойствата, дадени като израз на JavaScript изрази, се преизчисляват, ако някое от свойствата, използвано в израза, се промени. Тази концепция за деклариране на свойства, които зависят едно от друго и се обновяват на момента, се нарича обвързване на свойствата (property binding). QML се смята за разширение на JavaScript, но той всъщност е и подобрение. Докато JavaScript е ""патешки" език":en.wikipedia.org http://en.wikipedia.org/wiki/Duck_typing , QML прави проверка на основните типове и проверка на синтаксиса при зареждане на .qml файловете. Опитайте например следното:
import QtQuick 1.0
Rectangle {
color: 0
}
При зареждането на този файл в qmlviewer ще получите несъответствие на тип:
file:///home/frank/gitorious/qml-demos/MyRectangle.qml:3:12: Invalid property assignment: color expected
color: 0
Освен това в QML не ви е позволено да променяте глобален обект. Това често се случва по случайност, когато забравите да декларирате локална променлива с помощта на var.
Освен тези малки подобрения, JavaScript синтаксисa е напълно съвместим с JavaScript-а, използван в уеб браузърите. Можете да използвате вградените обекти като Date, Number или Math. Можете да пишете JavaScript код в отделни файлове и да ги импортирате в QML. Можете също така да деклариратe JavaScript функции в рамките на вашите компоненти. Обърнете внимание на следния пример:
import QtQuick 1.0
Rectangle {
width: 100; height: 100
color: red(0.5)
Rectangle {
anchors.verticalCenter: parent.verticalCenter
width: parent.width / 2
height: parent.height / 2
color: red(1.)
}
function red(v) { return '#''' Math.floor(v''' 255).toString(16)'' '0000'; }
}
Тук имаме обявена функцията red за изчисляване на червени тонове.
Стандартни компоненти в Qt Quick
QtQuick библиотеката предоставя богат набор от анимации, елементи за показване на изображения, елементи за въвеждане на данни и Model-View елементи. Има възможност за подреждане на елементите чрез закотвяне и позициониращи елементи, но няма компоненти от високо ниво като бутони или ленти с инструменти. В момента се разработват така наречените Qt Components за предоставяне на такива компоненти.