Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Label {<br />
id: result<br />
text: " "<br />
font.pixelSize: Theme.fontSizeHuge<br />
horizontalAlignment: Text.AlignHCenter<br />
width: parent.width<br />
}<br />
Label {<br />
id: dice_rolls<br />
text: " "<br />
font.pixelSize: Theme.fontSizeExtraSmall<br />
horizontalAlignment: Text.AlignHCenter<br />
width: parent.width<br />
height: 20<br />
wrapMode: Text.Wrap<br />
maximumLineCount: 2<br />
}<br />
Slider {<br />
id: nod<br />
label: "Number of dice"<br />
minimumValue: 1<br />
maximumValue: 10<br />
stepSize: 1<br />
value: 1<br />
valueText: value<br />
width: parent.width<br />
}<br />
Listaus 3. Sovelluksen pääsivun Label- ja Sliderkomponenttien<br />
sisältö.<br />
kymmeneen. Nykyinen arvo kerrotaan<br />
sovelluksen käyttäjälle valueText-ominaisuuden<br />
avulla. Sen arvo viittaa suoraan<br />
value-ominaisuuteen, jonka arvo puolestaan<br />
päivittyy automaattisesti, kun liukua<br />
siirretään.<br />
Loput pääsivun toiminnot ovat listauksessa<br />
4. Grid-komponentin avulla<br />
napit sijoitetaan ruudukkoon, jossa on<br />
kaksi saraketta ja neljä riviä. Grid sijoittaa<br />
alikomponenttinsa järjestyksessä<br />
vasemman ylänurkan solusta alkaen.<br />
Koska ruudukossa on yhteensä kahdeksan<br />
solua, pitää Grid-komponentilla olla<br />
kahdeksan alikomponenttia. Listauksesta<br />
kuitenkin nähdään, että niitä on vain<br />
kolme. Ruudukko täytetäänkin Repeaterkomponentin<br />
avulla.<br />
Repeater luo jokaista mallin alkiota<br />
kohden yhden edustajan (delegate). Mallin<br />
dataan päästään käsiksi modelDataominaisuuden<br />
avulla, jota voi käyttää<br />
edustajan määrittelyssä. Lisäksi edustajassa<br />
voi käyttää ominaisuutta index,<br />
joka kertoo data-alkion sijoituksen mallissa.<br />
Repeater-komponentti käytännössä<br />
korvaa sen, että painikekomponentti<br />
Button olisi toistettu kuusi kertaa hieman<br />
erilaisella nopan sivumäärällä.<br />
Button-komponentti on Silican painike.<br />
Yleensä sille asetetaan kolme ominaisuutta:<br />
leveys, teksti ja suoritettava<br />
toiminto, kun painallus havaitaan. Tässä<br />
tapauksessa painalluksen seurauksena<br />
kutsutaan funktiota roll_dice, joka arpoo<br />
noppien silmäluvut ja sijoittaa arvot<br />
Label-komponentteihin. Funktio näkyy<br />
listauksessa 5.<br />
Listauksessa 4 olevat kaksi viimeistä<br />
komponenttia muodostavat käyttäjän<br />
määrittämän nopan. Button-komponentti<br />
on muuten samanlainen kuin edelläkin,<br />
mutta nopan sivumäärä haetaan tällä<br />
kertaa erillisestä TextField-komponentista<br />
ja sen text-ominaisuudesta.<br />
TextField perii QML:n peruskomponentin<br />
TextInput, joten niiden ominaisuudet<br />
vastaavat pääosin toisiaan. Esimerkiksi<br />
syötteentarkistus voidaan hoitaa<br />
samalla tavalla eli käyttämällä IntValidator-,<br />
DoubleValidator- tai RegExpValidator-komponenttia.<br />
Noppasovelluksessa<br />
halutaan kokonaislukuja, joten käytetään<br />
IntValidatoria ja määritellään lukualueeksi<br />
2–10 000.<br />
TextField-komponentin hyödyllisiä<br />
ominaisuuksia ovat myös inputMethodHints<br />
ja placeholderText. Näistä<br />
ensimmäinen antaa virtuaalinäppäimistölle<br />
ohjeita, millaista syötettä odotetaan.<br />
Esimerkkisovelluksessa käytetty<br />
Qt.ImhDigitsOnly kertoo, että tekstikenttä<br />
hyväksyy vain numeroita, joten Sailfish<br />
tuo esiin numeronäppäimistön, kun<br />
tekstikenttä aktivoidaan. Ominaisuus<br />
placeholderText puolestaan asettaa tekstin,<br />
joka näytetään tekstikentän ollessa<br />
tyhjänä. Sen avulla voi vihjata käyttäjälle,<br />
mitä sisältöä kenttään halutaan.<br />
Sovelluskansi – vuorovaikutteinen<br />
kiiltokuva<br />
Katsotaan seuraavaksi, miten sovelluskansi<br />
toteutetaan. Kansi otetaan käyttöön<br />
ApplicationWindow-komponentin coverominaisuuden<br />
avulla. Suositeltavaa on<br />
käyttää kannen toteutuksessa Cover-<br />
Background-komponenttia, joka sisältää<br />
esimerkiksi logiikkaa kannen sijoittamiseen<br />
kotinäkymässä.<br />
Noppasovelluksen kanteen haluamme<br />
viimeisimmän nopanheiton tuloksen<br />
sekä pyyhkäisytoiminnon, jolla noppaa<br />
voi heittää suoraan kannesta käsin. Listauksessa<br />
6 on varsinainen kannen määrittely.<br />
Listauksen alussa määritellään<br />
pari ominaisuutta ja signaali, jotka auttavat<br />
pyyhkäisytoiminnon toteutuksessa.<br />
Kannessa näytettävät tekstit on toteutettu<br />
Label-komponenteilla, jotka puolestaan<br />
ovat sijoittelusta vastaavan Columnkomponentin<br />
sisällä.<br />
Kannen pyyhkäisytoiminnot määritellään<br />
CoverActionList-komponentin<br />
alikomponentteina, joita voi olla enintään<br />
kaksi. Ensimmäinen CoverActionalikomponentti<br />
tulee näkyviin kannen<br />
Grid {<br />
columns: 2<br />
rows: 4<br />
spacing: Theme.paddingLarge<br />
rowSpacing: Theme.paddingLarge<br />
Repeater {<br />
model: [4, 6, 8, 10, 12, 20]<br />
delegate: Button {<br />
text: "D" + modelData<br />
onClicked: roll_dice(modelData)<br />
width: base.button_width<br />
}<br />
}<br />
TextField {<br />
id: custom_dice<br />
text: "100"<br />
placeholderText: "Sides count"<br />
validator: IntValidator { bottom: 2; top: 10000 }<br />
inputMethodHints: Qt.ImhDigitsOnly<br />
width: base.button_width<br />
}<br />
Button {<br />
text: "D" + custom_dice.text<br />
onClicked: roll_dice(custom_dice.text)<br />
width: base.button_width<br />
}<br />
}<br />
Listaus 4. Sovelluksen pääsivun loppuosa eli Grid-komponentti ja sen alikomponentit.<br />
function roll_dice (max) {<br />
root.lastDiceMax = max<br />
var sum = 0<br />
var all_rolls = " "<br />
for (var i = 1; i 1) {<br />
if (i == 1) {<br />
all_rolls = roll.toString()<br />
} else {<br />
all_rolls = all_rolls + " + " + roll<br />
}<br />
}<br />
}<br />
result.text = sum<br />
root.lastThrow = nod.sliderValue + "d" + max + ": " + sum<br />
dice_rolls.text = all_rolls<br />
if(root.diceIsThrown === false) {<br />
root.diceIsThrown = true<br />
}<br />
return 0<br />
}<br />
Listaus 5. Nopan silmäluvun arvonnasta vastaava roll_dice-funktio.<br />
44 2014.2