Graafisen käyttöliittymän ohjelmointi



Samankaltaiset tiedostot
Valikot ja työkalupalkit. 2008

Tapahtumapohjainen ohjelmointi

Graafisen käyttöliittymän ohjelmointi

Dialogit. Juha Järvensivu 2008

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Dialogit. Juha Järvensivu 2007

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

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Graafisen käyttöliittymän ohjelmointi Syksy 2013

HELIA 1 (1) Outi Virkki Käyttöliittymät ja ohjelmiston suunnittelu :04

Tiedostonkäsittely ja asetusten tallentaminen. Graafisen käyttöliittymän ohjelmointi Luento 14

Graafisen käyttöliittymän ohjelmointi Syksy 2013

QT tyylit. Juha Järvensivu 2008

Ohjelmoinnin peruskurssien laaja oppimäärä

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

TIE Ohjelmistojen suunnittelu

Graafisen käyttöliittymän ohjelmointi Syksy 2013

TW-LTE 4G/3G. USB-modeemi (USB 2.0)

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

Jypelin käyttöohjeet» Ruutukentän luominen

Olio-ohjelmointi Syntaksikokoelma

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

Interaktiivinen käyttöliittymä. 2008

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

TIE Ohjelmistojen suunnittelu

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op)

GTK+ ohjelmointi. Juha Järvensivu 2007

Käyttöohje Mekuwin V1.9.0 MekuUI V MekuWin II. Konfigurointiohjelma

ITKP102 Ohjelmointi 1 (6 op)

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Ohjelmoinnin perusteet Y Python

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Hiirisanomiin vastaaminen. 2007

JUnit ja EasyMock (TilaustenKäsittely)

Käyttöliittymäohjelmointi

Eclipse & WindowBuilder

4. Luokan testaus ja käyttö olion kautta 4.1

Mitä Uutta - SURFCAM V5.1 Sisällysluettelo

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Ennen kuin aloitat lataamisen tarkista järjestelmävaatimukset:

Testivetoinen ohjelmistokehitys

Internet Explorer 7 & 8 pop-up asetukset

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

PlanMan Project projektihallintaohjelmisto koulutusohjeistus

Web Services tietokantaohjelmoinnin perusteet

TW- LTE 4G/3G. USB- sovitin (USB 2.0)

QT framework. Juha Järvensivu 2007

QT model view. Juha Järvensivu 2008

Harjoitus 2: Oppijan aktivointi ( )

OHJ-7400 Graafisen käyttöliittymän ohjelmointi, Harjoitustyö

KÄYTTÖVALTUUSHALLINTA (KVH) 1 (14) Käyttöohje rekisterinpidon yhteyshenkilölle

ITKP102 Ohjelmointi 1 (6 op)

1. HARJOITUS harjoitus3_korjaus.doc

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

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

1. Mitä tehdään ensiksi?

UpdateIT 2010: Editorin käyttöohje

TEHTÄVÄ 1.1 RATKAISUOHJEET

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Osio 4: Graafinen käyttöliittymä

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Jypelin käyttöohjeet» Ruutukentän luominen

15. Ohjelmoinnin tekniikkaa 15.1

MyTheatre asennus ja kanavien haku

EDMODO. -oppimisympäristö opettajille ja oppilaille KOONNUT: MIKA KURVINEN KANNUKSEN LUKIO

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

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

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Verkkosivut perinteisesti. Tanja Välisalo

HY-käyttäjät HUS/HYKS käyttäjät

Eclipse ja JUnit-ohjelmoijatestit

PlanMan Project 2015 projektihallintaohjelmisto loma-aikataulu

Trello. Manuaalisesti rekisteröityessäsi sinun tulee antaa oma nimesi, sähköpostiosoitteesi ja keksiä itsellesi salasana.

15. Ohjelmoinnin tekniikkaa 15.1

Win7 & Office Kouluttaja: Mikko Niskanen. Materiaali: ITP / hannele.rajariemi@jyu.fi ITP / mikko.niskanen@jyu.fi ITP / timo.vorne@jyu.

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Muita kuvankäsittelyohjelmia on mm. Paint Shop Pro, Photoshop Elements, Microsoft Office Picture Manager

Mobility Tool. Demo CIMO

Visma Fivaldi -käsikirja Asiakaskohtaiset hinnat

2016/07/05 08:58 1/12 Shortcut Menut

TAMPEREEN TEKNILLINEN YLIOPISTO KÄYTTÖOHJE TIETOVARASTON KUUTIOT

TIE Ohjelmistojen suunnittelu

Eclipse 3.2 pikku opas versio 1.0. Esittely Uuden projektin perustaminen Sovelluksen luominen Koodin siistiminen Vinkkejä

HP Photo Printing -pikaviiteopas

POP-UP -IKKUNOIDEN SALLIMINEN

Pedacode Pikaopas. Web-sovelluksen luominen

Ylläpitoalue - Etusivu

Verkkosivuston hallinnan ohjeet. atflow Oy AtFlow Oy, +358 (0)

9. Periytyminen Javassa 9.1

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

Graafisen käyttöliittymän ohjelmointi Syksy 2013

MOT: ADOBE CONNECT 1 (17) Projektipäällikkö Ari Sivula. Monimuotoisen opetuksen taitaja -koulutus ADOBE CONNECT. Peruskäyttö

Leikepöydän käyttö.net ja QT. Juha Järvensivu 2008

ASENNUS- JA KÄYTTÖOHJE

Transkriptio:

TIE-11300 Tietotekniikan vaihtuva-alainen kurssi Graafisen käyttöliittymän ohjelmointi Luento 4 Valikot ja dialogit Juha-Matti Vanhatupa

Sisältö Pääikkuna Valikot Dialogit

Pääikkuna (top-level window) Qt:ssa 3 vaihtoehtoa pääikkunan kantaluokaksi: QWidget QMainWindow QDialog

QWidget Kantaluokka UI-komponteille Käytetään sekä pääikkunana, että lapsi-ikkunoina. Voi sisältää toisia komponentteja Sisältää kaikille ikkunoille yhteisiä ominaisuuksia: enabled visible acceptdrops cursor jne.

QMainWindow QWidget:n aliluokka Sisältää: Valikot Työkalupalkin Tilarivin Central widgetin Dock widgetit Central widget voi olla mikä vain QWidget aliluokan olio. Sisältää oletuksena layout:n toisin kuin Qwidget ja QDialog

Valikot Valikoita melkein jokaisessa modernissa sovelluksessa Valikot sisältävät ohjelman käytön kannalta oleelliset toiminnot Usein monta vaihtoehtoista tapaa suorittaa toiminnot

Valikkojen jako Pull-down menut pääikkunan menubar Pop-up menut context menu, right-click menu Työkalupalkki

Qt:n valikot Qt tarjoaa valikoiden ja työkalurivien ohjelmointia helpottamaan QAction luokan. Valikkojen ja työkalupalkkien luonti sisältää seuraavat vaiheet: QAction:ien luonti ja niiden tietojen asetus Valikkojen ja työkalurivien luonti ja yhdistäminen QActioneihin.

QAction Toiminto, joka voidaan liittää valikkoon, mutta myös muihin widgetteihin. Sama instanssi voidaan kytkeä useampaan widgettiin samanaikaisesti. Näin toiminnot pysyvät automaattisesti synkronoituina, jos toiminnon tilaa muutetaan. Toiminto tulee lisätä parent-widgettiin ennen kuin voidaan käyttää, vaikka olisikin globaali.

QAction signaalit void changed () Kutsutaan kun toiminnon tilassa tapahtuu muutos void hovered () Kutsutaan kun jokin toiminto on korostettu (highlight) Esim käyttäjä siirtää hiiren kursorin menu valinnan päälle void toggled ( bool checked ) Kutsutaan, jos toiminnon checked tila muuttuu void QAction::setCheckable ( bool ) void triggered ( bool checked = false ) Kutsutaan kun käyttäjä suorittaa toiminnon

Tapahtumankäsittelijän liittäminen QAction* paction = new QAction( New, this); // Kytketään tapahtumankäsittelijä connect(paction,signal(triggered()),this,slot(onnew())); // Liitetään toiminto tarvittaviin widgetteihin pmenu->addaction(paction); panothermenu->addaction(paction); private void onnew() { // Kutsutaan kun action tapahtuu }

Pikavalinnat QAction* paction = new QAction( Project ); paction->setshortcut(qkeysequence(tr("ctrl+p"))); // TAI paction->setshortcut(qkeysequence(qt::ctrl + Qt::Key_P)));

Alt-tag QAction* fileitem = new QAction( &File ); QAction* newitem = new QAction( &New ); QAction* projectitem = new QAction( &Project );

Esimerkki QActionin luomisesta void MainWindow::createActions() { newaction = new QAction( New, this); newaction->seticon(qicon( :/images/new.png )); newaction->setshortcut(tr("ctrl+n")); newaction->setstatustip(tr( Create new file )); connect(newaction,signal(triggered()),this,slot(newfile()));

Pull-down menu QMenuBar Sisältää listan Pull-down menuja QMainWindow::menuBar ()

Pull-down menu QMenu* filemenu = menubar()->addmenu(tr("&file")); QAction* newact = new QAction(tr("&New"), this); newact->setshortcuts(qkeysequence::new); newact->setstatustip(tr("create a new file")); connect(newact, SIGNAL(triggered()), this, SLOT(onNewFile())); filemenu->addaction(newact);

QMenu Toteuttaa valikon, jota voidaan käyttää pull-down ja pop-up menuissa Valikko sisältää toimintoja Toiminnot lisätään menuun: QAction * QMenu::addAction ( const QString & text ) Periytetty QWidget-luokasta Menun disablointi ja piilottaminen

QMenu signals void abouttoshow () Kutsutaan juuri ennen kuin menu näytetään käyttäjälle void abouttohide () Kutsutaan juuri ennen kuin menu piilotetaan käyttäjältä void hovered ( QAction * action ) Kutsutaan kun jokin toiminto on korostettu (highlight) Esim käyttäjä siirtää hiiren kursorin menu valinnan päälle void triggered ( QAction * action ) Kutsutaan kun käyttäjä suorittaa toiminnon

Hierarkisuus Menuihin voidaan toteuttaa hierarkinen rakenne lisäämällä alimenuja QMenu* filemenu = menubar()->addmenu(tr("file")); QMenu* submenu = filemenu->addmenu(tr( New"));

Valikon päivittäminen Milloin päivittää valikon tila? Vaihtoehto 1: Ohjelma tarkkailee tilaansa ja päivittää valikon heti kun ohjelman tila muuttuu Vaihtoehto 2: Valikko päivitetään vasta sitten kun se avataan

On-Off (checked) QAction* projectitem = new QAction( &Project ); projectitem->setcheckable(true); // Oletuksena pois päältä projectitem->setchecked(true);

QActionGroup Hyödyllinen, jos checked actionit ovat riippuvaisia toistensa tilasta Jos yksi ryhmän toiminto valitaan, niin loput menevät automaattisesti pois päältä (exclusive) Hyödyllinen, jos sama toiminto halutaan suorittaa useammalle actionille QActionGroup::setDisabled ( bool b )

QActionGroup alignmentgroup = new QActionGroup(this); alignmentgroup->addaction(leftalignact); alignmentgroup->addaction(rightalignact); alignmentgroup->addaction(justifyact); alignmentgroup->addaction(centeract); leftalignact->setchecked(true);

Separator Erotinviiva, jonka avulla voidaan ryhmitellä toimintoja Toteutetaan QAction luokan avulla QAction* pseparator = new QAction(); pseparator->setseparator(true); pmenu->addaction(pseparator);

Pop-up menu QMenu Toimii myös pop-up menuna

Pop-up menu QMenu* popupmenu = new QMenu(); popupmenu->addaction( Copy ); popupmenu->addaction( Cut ); popupmenu->addaction( Paste ); // Avataan menu synkronisesti popupmenu->exec(qcursor::pos()); // TAI asynkronisesti popupmenu->popup(qcursor::pos());

QWidget ja QAction Myös widgetti voi sisältää listan actioneja QWidget::addAction ( QAction * action ) Qlist<QAction *> QWidget::actions () const ContextMenuPolicy Kertoo miten widgetti näyttää context menun

ContextMenuPolicy Enum Qt::NoContextMenu Parent widget huolehtii context menusta Qt::PreventContextMenu Ei context menua Qt::DefaultContextMenu Kutsutaan ContextMenuEvent eventtiä Qt::ActionsContextMenu Muodostetaan menu widgetin actioneista Qt::CustomContextMenu Emitoidaan custom context menu signaali QWidget::customContextMenuRequested ( const QPoint & pos ) pos = widgetin koordinaatit

QToolBar Työkalupalkki, johon voi lisätä QActiontyyppisiä toimintoja Toiminnot näytetään painikkeina (QToolButton) void QMainWindow::addToolBar ( QToolBar * toolbar )

QToolBar QToolBar* ptoolbar = new QToolBar( test bar ); QAction* paction = new QAction( test item ); // Lisää toiminto työkalupalkkiin ptoolbar->addaction(paction); // Liitä työkalupalkki pääikkunaan addtoolbar(ptoolbar);

QToolButton Esittää QActionin painikkeena enum Qt::ToolButtonStyle Qt::ToolButtonIconOnly (default) Qt::ToolButtonTextOnly Qt::ToolButtonTextBesideIcon Qt::ToolButtonTextUnderIcon

QStatusBar Voidaan asettaa (korvata) setstatusbar() funktiolla. Jos ei asetettu, tyhjä statusbar palautetaan kun statusbar() funktiota kutsutaan Ilmoituksia kolmea tyyppiä: - Tilapäinen Temporary Tilapäinen viesti näytetään status barissa. Voi piilottaa normaalin status barin tekstin. - Normaali Normal Esimerkiksi sivun ja rivin numerot tekstinkäsittelyohjelmassa. - Pysyvä Permanent Ei piiloteta koskaan. Käytetään tärkeille ilmoituksille, esimerkiksi Caps Lock:n päällä olo voidaan näyttää.

QStatusBar Tilapäinen viesti: statusbar()->showmessage(tr( Ready! )); Lyhytaikainen viesti voidaan poistaa kutsumalla clearmessage tai antaa aikaraja parametrina showmessage funktiokutsussa.

QStatusBar QStatusBar* pstatusbar = new QStatusBar(); // Normal widget vasempaan reunaan pstatusbar->insertwidget(0,pwidget); // Permanent widget oikeaan reunaan pstatusbar->insertpermanentwidget(0,pwidget2); // Liitä tilarivi pääikkunaan addtoolbar(pstatusbar );

Dialogit Käytetään yleensä lyhytaikaisessa kommunikoinnissa käyttäjän kanssa. Top-level ikkuna, mutta sisältää parentin toisin kuin muut top-level ikkunat. Dialogi aukeaa oletuksena parentin keskelle. Modaalinen dialogi blokkaa parent-ikkunan käytön.

Dialogisuunnittelun haasteita 1. Dialogin selkeä rakenne Rymittele komponentit selkeästi (rivit, sarakkeet, ryhmät (groupbox)) Jaa kokonaisuus useampaan osaan (välilehdet) Noudata annettuja tyyliohjeita Esim Windows User Experience Interaction Guidelines http://msdn.microsoft.com/en-us/library/aa511258.aspx 2. Ikkunan koon muutokset (skaalautuvuus) Suunnittele miten komponentit venyvät, kun ikkunan kokoa muutetaan 3. UI-tekstien muutokset (esim lokalisointi, riittääkö tila kun kieli vaihtuu?) Varaa riittävästi tilaa UI-teksteille Fontin koon muutos?

Esimerkki-dialogi

QDialog QDialog* dialog = new QDialog(); dialog->show(); // ei-modaalinen dialog->exec(); // modaalinen dialog->setmodal(true); dialog->show(); // modaalinen

QDialog Voi antaa paluuarvon (DialogCode) QDialog::Accepted QDialog::Rejected Voi sisältää oletusnäppäimiä: määrittää mitä toimintoa enter-näppäin vastaa dialogissa QPushButton::setDefault

QColorDialog QErrorMessage QFileDialog QFontDialog QInputDialog QPageSetupDialog QPrintPreviewDialog QProgressDialog QWizard Qt:n valmisdialogit

Lightbox Tekniikka, jossa käyttäjän huomio pakotetaan modaaliin dialogiin tummentamalla tausta. Käytetään web-käyttöliittymissä tai kuvagallerioissa. Haittoja: - Pakottaa käyttäjän todella keskeyttämään kaiken muun, joten ei tule käyttää turhaan. - Taustalla voi olla näkyvissä tietoja, joita tarvittaisiin tekemään päätös dialogissa.

QMessageBox Modaalinen dialogi, jolla voidaan näyttää yksinkertaisia ilmoituksia tai kysymyksiä käyttäjälle. QMessageBox msgbox; msgbox.settext("the document has been modified."); msgbox.exec();

QMessageBox Voidaan esittää myös kysymyksiä QMessageBox::StandardButton QMessageBox msgbox; msgbox.settext("the document has been modified."); msgbox.setinformativetext("do you want to save your changes?"); msgbox.setstandardbuttons(qmessagebox::save QMessageBox::Discard QMessageBox::Cancel); msgbox.setdefaultbutton(qmessagebox::save); int ret = msgbox.exec();

Omien käyttöliittymäkomponenttien teko Periytetään kantaluokasta Käytetään joko suoraan koodista tai QDesignerissa promote to -toiminnalla.

Tab järjestys Tabulaattori-näppäimellä voidaan vaihtaa fokus seuraavaan lapsi-ikkunaan. Focus policy arvolla voidaan määritellä ikkunan fokus-arvo. QWidget (static) void settaborder ( QWidget * first, QWidget * second ) Qt::FocusPolicy Qt::TabFocus Qt::ClickFocus Qt::StrongFocus (TabFocus ClickFocus) Qt::WheelFocus Qt::NoFocus