QT framework. Juha Järvensivu 2007

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

QT tyylit. Juha Järvensivu 2008

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Qt-käyttöliittymäkirjasto

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Graafisen käyttöliittymän ohjelmointi

Käyttöliittymän lokalisointi. Juha Järvensivu 2008

QT model view. Juha Järvensivu 2008

Graafisen käyttöliittymän ohjelmointi Syksy 2013

C# ja.net. Juha Järvensivu 2007

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

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Tapahtumapohjainen ohjelmointi

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Graafisen käyttöliittymän ohjelmointi

Graafisen käyttöliittymän ohjelmointi Syksy 2013

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

Eclipse 3.1 Pikaopas versio 1.0

Qt-ohjelmointitekniikat Java-osaajan näkökulmasta

Web Services tietokantaohjelmoinnin perusteet

.NET ajoympäristö. Juha Järvensivu 2007

Object Framework - One. OF-1 is a high-productive Multi-UI OpenEdge data driven development framework. Veli-Matti Korhonen

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245

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

Dialogit. Juha Järvensivu 2008

GTK+ ohjelmointi. Juha Järvensivu 2007

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

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Rinnakkaisuus (.NET) Juha Järvensivu 2007

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

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

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

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

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Scratchbox ja Maemo. Nokia 770 Internet Tablet-ohjelmistokehitys. Timo Savola. Movial Oy. FUUG:in kevätristeily

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

Jypelin käyttöohjeet» Ruutukentän luominen

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Encapsulation. Imperative programming abstraction via subprograms Modular programming data abstraction. TTY Ohjelmistotekniikka

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Asynkroninen ohjelmointi.net 4.5 versiolla

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Microsoft Visual J++ ohjelmointiympäristö

Valikot ja työkalupalkit. 2008

Delegaatit ja tapahtumakäsittelijät

Ohjelmoinnin peruskurssien laaja oppimäärä

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

9. Periytyminen Javassa 9.1

Qt pohjaisen paikkatietotyökalun suunnittelu ja toteutus

Ikkunointijärjestelmät

2010-luvun kansalaistaito: Windows-puhelimen ohjelmointi. Kai Lindgren, Teollinen tuotanto/metropolia

Graafisen käyttöliittymän ohjelmointi Syksy 2013

9. Periytyminen Javassa 9.1

15. Ohjelmoinnin tekniikkaa 15.1

10. Luento: Kohti suurempia sulautettuja ohjelmistoja. Arto Salminen,

Luokan muodostimet (Constructors)

15. Ohjelmoinnin tekniikkaa 15.1

Java-kielen perusteet

Tampereen ammattikorkeakoulu Tietotekniikan koulutusohjelma Ohjelmistotekniikka Kirsi Marja Eskola. Opinnäytetyö. QtCreator Hands On lab plug in

Qt Quick-kehitys Maemo-alustalle

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Dialogit. Juha Järvensivu 2007

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

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

Windowsin sanomanvälitys. Juha Järvensivu 2007

Osa VII. Mitä mallit ovat ja kuinka niitä käytetään Miksi mallit tarjoavat paremman vaihtoehdon makroille Kuinka luokkamalleja luodaan

Metodien tekeminen Javalla

Java UI-komponentit (JTable) Juha Järvensivu 2007

Common Language Runtime

Rich Web Applications in Server-side Java without Plug-ins or JavaScript

Attribuutit. Copyright IT Press Tämän e-kirjan kopiointi, tulostaminen ja jakeleminen eteenpäin luvatta on kielletty.

Tyyppiluokat II konstruktoriluokat, funktionaaliset riippuvuudet. TIES341 Funktio-ohjelmointi 2 Kevät 2006

812336A C++ -kielen perusteet,

Olio-ohjelmointi Javalla

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

VisualStudio Pikaopas, osa 1: WEB sivujen suunnittelu

13. Luento: Esimerkki: Symbianympäristö. Tommi Mikkonen,

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

JAVA-OHJELMOINTI 3 op A274615

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

C# 3.0:n uudet ominaisuudet Language Integrated Query...45

Tietorakenteet ja algoritmit

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

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010


815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

OPETUSSUUNNITELMA SYMBIAN KOULUTUS. Oulussa Koulutuksen aloitus, lähtötason testaus, henkilökohtainen opiskelusuunnitelma

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

T Henkilökohtainen harjoitus: FASTAXON

RINNAKKAINEN OHJELMOINTI A,

Osio 4: Graafinen käyttöliittymä

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Loppukurssin järjestelyt C:n edistyneet piirteet

Rajapinta (interface)

Transkriptio:

QT framework Juha Järvensivu juha.jarvensivu@tut.fi 2007

QT Framework QT Class Library QT Designer QT Assistant QT Linguist http://trolltech.com

QT Class Library C++ API >400 luokkaa Kattava widget kirjasto Hyvä tuki omien UI-komponenttien toteuttamiselle

QT Designer Graafinen käyttöliittymäeditori Voidaan käyttää itsenäisenä ohjelmana tai integroida kehitysympäristöön Visual Studio integration Eclipse integration Designer Demo http://dist.trolltech.com/video/browser.html

QT Assistant Dokumentaatio Erillinen help-ohjelma, joka voidaan kustomoida käyttäjän tarpeiden mukaan Toiminta samankaltaista kuin selaimissa Bookmarks HTML Next / Prev

QT Linguist QT:n lokalisointityökalu

QT Framework Cross-Platform Rich Client Development Kaksoislinsensointi

Crossplatform environment Qt / Windows Qt / MAC Qt/ X11 Qtopia Core (embedded Linux) Qt Jambi (QT for Java)

Crossplatform environment Sovellukset ajetaan natiivisti (ei tulkata) Tehokasta QT kapseloi käyttöjärjestelmäkohtaisia apeja Tiedostojen käsittely Verkko-ominaisuudet Prosessit Säikeet Tietokanta yhteydet jne.

Dual Lisencing Model Maksullinen kaupallinen versio QT Console Edition QT Desktop Light Edition QT Desktop Edition Open Source versio GPL (v2)

QT Class Library

Qt Class Library Modules Core Module GUI Module Network Module OpenGL 3D Visualization Module Database Module XML Module

QT Core Module QT Object Model QT event processing model QT container classes Threading Process Handling File I/O QThread QString QVector QMetaType QSettings QObject QPoint

QT GUI Module Käyttöliittymäkirjasto Fontit Auto-scaling Input validation styles QButton QWidget QPen QClipboard QDialog QImage QResizeEvent

QT Object Model Hello World Parent-child relationship QPointer Signals and slots Meta object system (moc) Layout

Hello world #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton hello("hello world!"); hello.resize(100, 30); hello.show(); return app.exec(); } http://doc.trolltech.com/4.3/tutorial-t1.html

Parent object Constructor: QWidget(QWidget* pparent = 0); QWindow* pwindow = new QWindow(); QPushButton pbutton = new QPushButton(pWindow); // The destructor of a parent object // destroys all child objects! delete pwindow; QObject QWidget QPushButton

QPointer Turvallinen osoitin Osoitin nollataan automaattisesti kun objekti johon se osoittaa tuhotaan Käytä QPointeria kuten normaaleja osoittimia QPointer<QLabel> plabel = new QLabel; QPointer<QLabel> plabel2 = plabel; plabel->settext( otsikko ); // Myös plabel2 nollautuu! delete plabel;

Signals and Slots QT:n callback-tekniikka http://doc.trolltech.com/4.3/signalsandslots.html

Signals and Slots QPushButton* pbutton = new QPushButton(); connect(pbutton,signal(clicked()),this,slot(on Clicked()); CMyClass::onClicked() { // Add event handler code here }

Signals and Slots class CMyClass : public QObject { Q_OBJECT public: // declare public members here private: // declace private members here signals: void somesignal(int nindex); slots: void clicked(); // slots work also as normal member function };

Signaalin emitointi // Kutsuu kaikkia connectoituneita. // kuuntelijoita. Signaali ei tiedä // kuinka monta kuuntelijaa sillä on. emit somesignal(2);

Meta Object System Signaalit ja eventit tarvitsevat toimiakseen QT:n meta-object mekanismia Kaikki QObject-luokasta suorasti tai epäsuorasti perityt objektit voivat hyödyntää meta-object mekanismia Luokan header-koodiin pitää lisätä Q_OBJECT makro Luokan käännetään meta-object kääntäjällä (moc) käännösprosessin yhteydessä (moc-file)

Meta Object System class CMyClass : public QObject { Q_OBJECT public: // declare public members here private: // declace private members here signals: void somesignal(int nindex); slots: void clicked(); // slots work also as normal member function };

Layoutit (QLayout) QHBoxLayout QVBoxLayout QGridLayout QWidget *window = new QWidget; QPushButton *button1 = new QPushButton("One"); QPushButton *button2 = new QPushButton("Two"); QPushButton *button3 = new QPushButton("Three"); QPushButton *button4 = new QPushButton("Four"); QPushButton *button5 = new QPushButton("Five"); QHBoxLayout *layout = new QHBoxLayout; layout->addwidget(button1); layout->addwidget(button2); layout->addwidget(button3); layout->addwidget(button4); layout->addwidget(button5); window->setlayout(layout); window->show();

Paint System class RenderArea : public QWidget { Q_OBJECT protected: void paintevent(qpaintevent *event); } Event RenderArea::paintEvent(QPaintEvent* event) { QPainter painter(this); painter.setpen(pen); QRect rect(10, 20, 80, 60); painter.drawellipse(rect); painter.restore(); }

QT event loop Kapseloi käyttöjärjestelmän eventit Ohjelmoija voi luoda omia eventtejä (QEvent::user) QObject-luokasta perityt luokat voivat vastaanottaa eventtejä Yleensä virtuaalifunktiota, jotka ylimääritellään omassa koodissa Esim QMouseEvent QKeyEvent QTimerEvent QResizeEvent virtual void paintevent ( QPaintEvent * event ) QCloseEvent QPaintEvent QtCoreApplication::sendEvent(); QtCoreApplication::postEvent();

void event(qevent* event); bool MyWidget::event(QEvent *event) { if (event->type() == QEvent::KeyPress) { QKeyEvent *ke = static_cast<qkeyevent *>(event); if (ke->key() == Qt::Key_Tab) { // special tab handling here return true; } } else if (event->type() == MyCustomEventType) { MyCustomEvent *myevent = static_cast<mycustomevent *>(event); // custom event handling here return true; } return QWidget::event(event); }

Model / View programming MVC-variaatio, jossa V+C sulautettu yhteen Model ja View kommunikoivat QT:n signalslot mekanismilla Delegate-luokkaa huolehtii varsinaisesta piirrosta

Model / View programming Views QListView QTableView QTreeView QAbstarctItemView Models QAbstarctItemModel QDirModel QStandardItemModel QSqlQueryModel QAbstractListModel

Lähteet Throlltech http://trolltech.com/products/qt QT in depth http://trolltech.com/products/qt/indepth/indepth QT Reference Documentation http://doc.trolltech.com/4.3/index.html QT Model-View programming http://doc.trolltech.com/4.3/model-view-programming.html QT Tutorial http://doc.trolltech.com/4.3/tutorial.html QT Classes http://doc.trolltech.com/4.3/classes.html