Workshop o QML II

Na konferenci openmobility jsem měl workshop na téma QML. Konference je sice dávno pryč, ale až teď jsem si udělal trošku času o ní něco napsat.

Je příbližně měsíc a půl po konferenci a na serveru openmobility se mezitím neobjevil ani jeden článek. A není divu. Všichni konferencí vyčerpali svůj volný čas na nějakou dobu dopředu. A ti ostatní už mezitím stihli další dvě konference (třeba LinuxWochen ve Vídni nebo LinuxTag v Berlíně).

Pár lidí v minulém článku se ptali po záznamech, tak vězte, že letos žádný záznam nebude. Minulé ročníky jsem se o to staral ja, když jsem se na to ptal letos, tak jsem se před konferencí dozvěděl, že by to snad měl udělat někdo z Prahy. Přímo na místě jsem se dozvěděl, že záznamy z technických důvodů nebudou. A protože jsem měl vlastních starostí dost, tak jsem tuhle drobnost neřešil. Udělal jsem nějaké fotky, ale nemám je moc protříděné. Souhlasil jsem s tím, aby je kluci z LinuxExpressu zveřejnili ve svém článku, takže si je můžete prohlídnout tam..

Dlouho jsem taky přemýšlel nad tématem, o kterém jsem měl mluvit. Rozhodl jsem se udělat programovací workshop a na místě předvést, co všechno se za 30 minut dá stihnout. Cestou do Prahy jsme v autě diskutovali o tom jaká aplikace by to měla být. Původně jsem chtěl udělat countdown a na jeho konci přepnout profil vyzvánění. S odstupem času můžu říct, že můj původní nápad bych asi nestihl ani kdybych měl hodinový blok. Navíc jsem se někde U Křížu dozvěděl, že tohle už je hotové a odladěné k dokonalosti (a taky to stojí 30,-).

Nakonec jsem se rozhodl vytvořit jednoduchý program k vylosování výherců upomínkových předmětů. Nikdo nemůže říct, že by slosování bylo zfixlované, protože všichni viděli program, který losuje. Programování před obecenstvem je jako vždy velká výzva a je tam velké riziko, že se něco nepodaří a něco nebude fungovat. Při přemýšlení jak programovat mi navíc docela přestalo jít mluvení v angličtině. Naštěstí jsem měl trpělivé publikum, které mi chybu pomohlo najít.

import QtQuick 1.1
import com.nokia.meego 1.0
Page {
  tools: commonTools

  XmlListModel { // toto je komponenta, která stáhne XML soubor a XPathem z něj vytvoří "ListModel"
    id: xmlModel
    source: "./survey.xml" // tady může být přímo URL kde se nacházejí data
    query: "/data/answer" // čast XPath dotazu, která říka co se opakuje tady jsem měl chybu
    XmlRole { name: "name"; query: "name/string()" } // jednotlivé opakující se položky
    XmlRole { name: "from"; query: "from/string()" }
    XmlRole { name: "email"; query: "email/string()" }
  }

  ListView { // zobrazuje je už stejně jako ListModel
    // zajistuje aby se položky zobrazili pod sebe
    anchors.fill: parent
    model: xmlModel // jaký model se má zobrazit
    delegate: Rectangle { // jak má vypadat jedna položka
      anchors.left: parent.left;
      anchors.right: parent.right;
      height: 60
      Label {
        anchors.centerIn: parent;
        text: model.name
      }
    }
  }

  Button { // tlačítko pro výběr jedné položky ze seznamu
    id: chooseButton
    anchors.bottom: parent.bottom;
    anchors.horizontalCenter: parent.horizontalCenter
    text: "choose one"
    onClicked: { // toto je demonstrace toho jak ošetřit nějakou událost
      var idofWinner = parseInt(Math.random()*xmlModel.count)
      winnerName = xmlModel.get(idofWinner).name;
    }

    // toto je demostrace toho, že když se změní property, tak se přepočítají i všechny ostatní věci
    enabled: (xmlModel.status == XmlListModel.Ready)
  }
  Rectangle { // tady zobrazíme tu náhodně vybranou položku
    anchors.bottom: chooseButton.top;
    anchors.left: parent.left
    anchors.right: parent.right
    height: 50

    Label {
      text: winnerName
      anchors.centerIn: parent;
    }
  }

  // a tímhle jsem si zajistil, že nevyhraju (-;
  property string winnerName: "Jozef Mlich"
  onWinnerNameChanged: {
    console.log("winner name is " +winnerName)
  }
}
enabled: (xmlModel.status == XmlListModel.Ready)

Jak už jsem se zmínil, tak konference vyčerpala naši zásobu novinek a článků o nich. Moje průměrná doba vydání článku je teď měsíc (tedy jenom čas od napsání do vydání). Právě se podařilo dovydat a dokorigovat můj článek o qr kódech. Do budoucna se můžete těšit na články o programování na Nokii N900 a Symbian Belle. Mimo to bych taky něco rád napsal o Bluetechnix iMX 51, který jsem dostal na Linux Wochen ve Vídni.

Facebooktwittergoogle_plusredditpinterestlinkedin