TIE Ohjelmistojen suunnittelu. Luento 3: käyttöliittymien toteutustekniikat, QML

Samankaltaiset tiedostot
TIE Ohjelmistojen suunnittelu. Luento 2: protot sun muut

QT tyylit. Juha Järvensivu 2008

TIE Ohjelmistojen suunnittelu

TIE Ohjelmistojen suunnittelu

Qt perusteet. Juha-Matti Vanhatupa. (vanhan kurssin Graafisen käyttöliittymän ohjelmointi materiaalia)

Graafisen käyttöliittymän ohjelmointi

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

TIE Ohjelmistojen suunnittelu

Windows Phone ohjelmointi perusteet

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

TIE Ohjelmistojen suunnittelu

C# ja.net. Juha Järvensivu 2007

Ohjelmoinnin perusteet Y Python

TIE Ohjelmistojen suunnittelu. Luento 2: protot sun muut

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Ulkoasun muokkaus CSS-tiedostossa

Lisätehtävät. Frantic 2015 sivu 1

Graafisen käyttöliittymän ohjelmointi Syksy Luento 13 QML Antti Nieminen

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Copyright Observis Oy All rights reserved. Observis Oy Ville Kanerva, CTO Heikki Isotalus, COO Datasta tietoa

Valikot ja työkalupalkit. 2008

TIE Principles of Programming Languages CEYLON

Flash ActionScript osa 4

Graafisen käyttöliittymän ohjelmointi Syksy 2013

19/20: Ikkuna olio-ohjelmoinnin maailmaan

Digitaalisen median tekniikat. Luento 4: JavaScript

Kotisivujen teko. Jan Lindholm Kirkkonummen kansalaisopisto Syksy koodari.eu jsbin.com

Racket ohjelmointia II. Tiina Partanen 2015

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

HTML & CSS. HTML (HyperText Markup Language) Antti Koivisto. ! HTML on sivujen kuvauskieli.

Voit käyttää tekemääsi ohjelmaa seuraavan viikon harjoituksissa, joten kopio työsi hedelmät talteen äläkä tuhoa niitä.

Internet-pohjaisen oppimisympäristön laadinta. Luento 3

Tech Conference Visual Studio 2015, C#6,.NET4.6. Heikki Raatikainen. #TechConfFI

Ohjelmistotekniikan menetelmät, UML

H T M L eli kuinka laadin itselleni päheät kotisivut. Janne Käki

TIE Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

VisualStudio Pikaopas, osa 1: WEB sivujen suunnittelu

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

Graafisen käyttöliittymän ohjelmointi

TIE Ohjelmistojen suunnittelu

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

H T M L eli kuinka laadin itselleni päheät kotisivut. Janne Käki

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

Digitaalisen median tekniikat. JSP ja XML

Ohjeita Siemens Step7, Omron CX Programmer käyttöön

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

CSS - tyylit Seppo Räsänen

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Ohjelmoinnin peruskurssi Y1

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

JS-kehitys - yleiskuvaus. TIEA255 - Juho Vepsäläinen

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

WWW-Sivustojen suunnittelu

TIE Ohjelmistojen suunnittelu

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

WWW-Sivustojen suunnittelu. Miten WWW toimii. Suunnittelun lähtökohdat

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

Muutamia peruskäsitteitä

Ohjelmistojen mallintaminen Unified Modeling Language (UML)

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

15. Ohjelmoinnin tekniikkaa 15.1

Digitaalisen median tekniikat. Luento 3: CSS

...ii...iii...x. 1 Silverlight NET Framework for Silverlight Silverlight Silverlight. 2-1 Visual Studio Silverlight...

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

PLA Mobiiliohjelmointi. Mika Saari

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

valitsin on useimmiten html-elementti, jolle tyyli halutaan luoda

12. Kehysarkkitehtuurit

VisualStudio Pikaopas, osa 1: WEB-sivujen suunnittelu

OHJ-7400 Graafisen käyttöliittymän ohjelmointi 4/6op

directive attr1= value1 attr2= value2 %>

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

C# Windows ohjelmointi perusopas

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

15. Ohjelmoinnin tekniikkaa 15.1

Verkkosivut perinteisesti. Tanja Välisalo

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Java-kielen perusteet

Sisältö. XML, XHTML ja CSS XML XML. XML:n ja HTML:n ero. XML kieliä XML XHTML CSS XSL. T Hypermediadokumentin laatiminen 2002

12 Mallit (Templates)

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

Android ohjelmointi Tunti 2. Käyttöliittymät ja resurssit

Web Services tietokantaohjelmoinnin perusteet

Ohjelmointi 2 / 2010 Välikoe / 26.3

Olio-ohjelmointi Javalla

Ohjelmointi 1 Taulukot ja merkkijonot

Jypelin käyttöohjeet» Ruutukentän luominen

Mobiilimaailma murroksessa 2011 Tommi Teräsvirta, Tieturi

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Alkuun HTML5 peliohjelmoinnissa

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

PLA Mobiiliohjelmointi. Mika Saari

Jypelin käyttöohjeet» Ruutukentän luominen

Transkriptio:

TIE-20200 Ohjelmistojen suunnittelu Luento 3: käyttöliittymien toteutustekniikat, QML 1

Tämän päivän ohjelmaa Viikkoharjoitukset alkavat! Yleisesti käyttöliittymien toteutustekniikoista Myöhemmin MVC, MVVM, MVP, M-V Qt ja QML lyhyesti Presemo? 2

Käyttöliittymien toteuttaminen Perinteisempi Widget-pohjainen lähestyminen Käyttöliittymän toteutus samalla ohjelmointikielellä käyttöliittymäkirjastojen käyttö Ohjelman käyttöliittymä yleensä kooste tarjotuista valmiista komponeneteista ja valmiiden komponenttien erikoistuksista 3

Widgetit, käyttöliittymäkomponenttien käyttö Käyttöliittymäkomponentit, luominen ja hallinta: staattisemmat käyttöliittymät, esim. suoraan käyttöliittymäeditorilla tai dynaamisesti koodista Kali-editorit, olio-ohjelmointia tiedostomattomalla tasolla :) Käyttö suoraan koodissa, kuten mitkä tahansa muutkin luokat ja oliot Jäsenfunktioiden kutsut jne. 4

Widgetit, käyttöliittymäkomponenttien erikoistaminen Koodi tulee kotisivuille Hierarkiaa: QWidget, kantaluokkia QObject and QPaintDevice. Qlabel, periytyy QWidget SpecialLabel peritään QLabelista 5

Mitä potentiaalisia ongelmia widget-lähestymistavassa on? 6

Käyttöliittymäkielet 7

Tietojen sitominen, käyttöliittymät Ideana sitoa käyttöliittymässä näkyvä/esitettävä asia ohjelmakoodin arvoihin, propertyihin tai toimintoihin Sen sijaan että esim. tekstikentän arvoa muutetaan koodissa kutsumalla esim. tekstikenttäolion palveluita, kerrotaan että tekstikentän arvo on sidottu esim. merkkijonomuuttujan/propertyn arvoon jos tekstikentän arvoa muutetaan, muuttuu arvo koodissa. Jos arvo koodin puolella muuttuu, muuttuu arvo käyttöliittymässä. Sidonta mahdollista myös käyttöliittymäelementtien välillä, esim. taulukon koko sidotaan merkkijonoon tai elementin sijainti toiseen elementtiin.

Tietojen sitominen, käyttöliittymät Jos käytössä olisi vain normaalit muuttujat, mitä vaaroja tietojen sidonnassa esitellyssä tilanteessa voisi olla? Tai yleisesti, jos meillä on tilanne jossa muuttujaa voidaan muuttaa ja lukea sekä käyttöliittymän että muun ohjelman suunnasta, mikä voisi mennä pieleen? Muu ohjelma Dataa a34ac4 käyttöliittymä Käyttöliittymä ja ohjelman toteutus sotkeutuvat toisiinsa, rinnakkaisuus, säieturvallisuus, poissulkemiset, säikeiden välinen viestintä Ratkaisuja käyttöliittymäkirjastoissa: Viestimekanismit, propertyt/suojatut tietotyypit, property changed tapahtumat, omat kokoelmatyypit, jotka ovat säieturvallisia.

Merkintäkielipohjaisuus Widget-lähestymistapa, käännetään ajettava ohjelma kokonaisuudessaan. Käyttöliittymäosuudessa ympäristön/käyttöliittymäohjelmiston automaattisesti tuottamaa koodia Merkintäkielilähestymistapa: Kuten widgeteissä, merkintäkieli käännetään ajettavaksi koodiksi jne. Esimerkiksi kali-editorin tuottamien juttujen tallennusmuoto Merkintäkieli + mahdolliset käyttöliittymäskriptit ajoaikainen tulkkaus (web), näistä kutsut varsinaiseen ohjelmalogiikkaan 10

Lisää merkintäkielistä Käyttöliittymäkieli, usein XML-pohjaista tai CSS-tyylistä Usein eriytettynä käyttöliittymäkomponenttien määrittely, tyyli ja käyttöliittymätoiminnallisuus (esim. HTML, CSS, JavaScript + palvelimet, joissa data & järeämpi toiminnallisuus) Mahdollistaa käyttöliittymän toteuttamisen ilman oikeaa koodausta (ainakin periaatteessa) Kalisuunnittelija tekee käyttöliittymän Koodarit varsinaisen ohjelman, yhdistetään käyttöliittymän toiminnot varsinaiseen toiminnallisuuteen 11

XAML-esimerkki Microsoft ja XAML Toiminnallisuus luokissa jne. Käyttöliittymän ulkonäkö XAML-tiedostot, näkymäkohtaiset jutut jne. Tyylimäärittelyt, joko komponenttikohtaisesti tai globaalimmin Käyttöliittymän tietojen sitominen koodiin (Ohjaa vahvasti käyttämään MVVMratkaisumallia) 12

Merkintäkieli vs. koodi <!--XAML--> <Grid x:name="contentpanel" Margin="12,0,12,0"> <Button Height="72" Width="160" Content="Click Me" /> </Grid> // C# // Initialize the button Button mybutton = new Button(); // Set its properties mybutton.width = 160; mybutton.height = 72; mybutton.content = "Click Me"; // Attach it to the visual tree, specifically as a child of // a Grid object (named 'ContentPanel') that already exists. In other words, position // the button in the UI. ContentPanel.Children.Add(myButton); 13

Tiedon sitominen 14

QML Qt meta language / Modeling language, deklaratiivinen skriptikieli Helppo eriyttää käyttöliittymä ja sen logiikka varsinaisesta ohjelmakoodista Skriptitiedostoja ei käännetä, nopea protoilla, melko yksinkertaista vaihtaa käyttöliittymä JavaScript koodi voidaan kirjoittaa suoraan QML:n tiedostoon, tai lisätä importein JavaScript tiedostoja. Esim: import jstiedosto.js" as AnimationFunctions 15

QML Syntaksi muistuttaa CSS-tyylimäärittelyjä. Elementtejä (Elements), joilla ominaisuuksia (property) Property-arvo parit määrittelyissä (esim. x = 100) Rectangle { width: 200; height: 100; x: 100; y: 150; color: "yellow" Text { text: "Hei ohjsuun!"; font.pointsize: 20 } } 16

Lisää määrittelyistä Elementeille voi antaa tunnisteen (id) Propertyn arvo voi riippua toisesta propertystä (esim. id:n tai parent-suhteen perusteella Rectangle { visible: true id: another width: hellorect.width + 100 height: hellorect.height + 100 color: "#0500ff" z: 1 x: hellorect.x - 50 y: hellorect.y - 50 } Item { width: 300; height: 300; Rectangle { width: parent.width - 50; height: 100 color: "yellow" } } 17

Esimerkki 18

QML:n tyypeistä lisää Ominaisuuksien määrittely, perustietotyypit, esim. int, string, real Tyyppiturvallisuus ( x = moi! virhe) http://qt-project.org/doc/qt-5/qtqml-typesystem-basictypes.html Qt Quick QML:n tietotyyppejä, esimerkiksi ruudulla näkyvät (Rectangle, Item, Image, Text), kontrollit (Button), tapahtumat (MouseEvent) http://qt-project.org/doc/qt-5/qtquick-qmltypereference.html 19

QML ja tilat Elementeillä oletuskonfiguraatio joka määritellään (yleensä) propertyillä Uusien tilojen määrittely states propertyllä, niissä määritellään erot oletuskonfiguraatioon 20

Tiloista lisää? Tiloilla on propertyjä kuten muillakin elementeillä. changes name extend when states: State { name: "resized"; when: mousearea.pressed PropertyChanges { target: myrect; height: container.height } } 21

Transitiot Tilasiirtymät tapahtuvat välittömästi Jos halutaan tehdä tilasiirtymä viiveellä/animoidusti, voidaan käyttää transitioita states: State { name: "down"; when: mousearea.pressed == true PropertyChanges { target: hellotext; y: 160; rotation: 180; color: "red" } } transitions: Transition { from: ""; to: "down"; reversible: true ParallelAnimation { NumberAnimation { properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad } ColorAnimation { duration: 500 } } } 22

Tulevaa QML ja tietojen sidonta, Models & Views Suunnittelutason ratkaisuja, käyttöliittymän ja datan erottaminen toisistaan 23

Linkkejä http://qt-project.org/doc/qt-5/qtquickindex.html http://qt-project.org/doc/qt- 5/qmlreference.html 24

Yhteenvetoa Käyttöliittymäkielet, lyhyt pikaesittely Qt ja QML: perusasiat QML:stä Rakenne Elementit, propertyt Tilat Tulossa QML ja C++, Javascript & QML, jotain kevyttä animaatioista yms. 25