Wprowadzenie do tworzenia zaawansowanych interfejsów graficznych: QGraphics View Framework vs. QML. Jakub Bogacz. Patryk Górniak

Podobne dokumenty
The Graphics View Framework. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. he Graphics View Framework - architektura

Qt sygnały i designer

Programowanie w środowiskach RAD Qt i C++

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Programowanie w środowiskach RAD QtCreator, Qt i C++

Qt - podstawowe cechy

Zaawansowane programowanie w C++

Mechanizm sygnałów i slotów. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4. Sygnały i sloty - definicja klasy

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Praca z aplikacją designer

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

X Window System (I) Oprogramowanie i wykorzystanie stacji roboczych. Wykład 1. X Window System (III) X Window System (II)

Signals + Threads: Qt vs. Boost

Programowanie, część III

System X Window (I) Oprogramowanie i wykorzystanie stacji roboczych. Wykład 3. System X Window (III) System X Window (II)

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 3

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Podstawy programowania w Qt4

Tytuł oryginału: Advanced Qt Programming: Creating Great Software with C++ and Qt 4

Kurs programowania. Wykład 4. Wojciech Macyna. 23 marca 2016

Tytuł pracy. Praca dyplomowa inżynierska. Filip Piechocki. Tytuł Imię i Nazwisko

Qt - dialogi. Bogdan Kreczmer. ZPCiR ICT PWR pokój 307 budynek C3

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Qt hierarchia elementów graficznych

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Wizualizacja przejazdu labiryntu przez robota mobilnego typu Micromouse

Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Digia Plc. na licencji CC.

Grafika dwuwymiarowa

Języki i metody programowania Java. Wykład 2 (część 2)

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Konfiguracja historii plików

Wstęp do JUNG. Omówione elementy wykorzystane w Edge Color Project

Rys. 1. Główne okno programu QT Creator. Na rysunku 2 oznaczone zostały cztery przyciski, odpowiadają kolejno następującym funkcjom:

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Qt - edycja, obsługa zdarzeń, rozmieszczenie kontrolek

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Projektowanie klas c.d. Projektowanie klas przykład

Aplikacja po polsku. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

mprofi.pl nowa generacja usług mobilnych TWOJA APLIKACJA MOBILNA: Komunikator na smartfony

Opis instalacji systemu Intranet Komunikator

Programowanie obiektowe i C++ dla matematyków

JAVA W SUPER EXPRESOWEJ PIGUŁCE

TEMAT : KLASY POLIMORFIZM

C++. Wykorzystaj potêgê aplikacji graficznych

Wykład 2. Budowa komputera. W teorii i w praktyce

Kurs programowania. Wykład 6. Wojciech Macyna. 7 kwietnia 2016

- dodaj obiekt tekstowy: /** Maciej */ Stage { title : "First JavaFX App" scene: Scene { width: 300 height: 300 content: [ ] } }

Programowanie obiektowe

Instrukcja obsługi. Oprogramowanie SAS 31

Ćwiczenia IV - Kontenery (pojemniki)

Wartości domyślne, szablony funkcji i klas

Generalnie przeznaczony jest do obsługi systemów klimatyzacyjnych i chłodniczych.

Projektowanie Graficznych Interfejsów Użytkownika Robert Szmurło

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

SL: warstwy aplikacji. Wykład 4 Silverlight

Zaawansowane Aplikacje Internetowe

Wprowadzenie do platformy Qt

Podstawy programowania obiektowego

wczesnej fazie rozwoju, zaimplementowano

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Qt po polsku. Bogdan Kreczmer.

Wzorce projektowe strukturalne cz. 1

Programowanie, część I

Logger. Następnie w klasie Bootstrapper muimy zarejestrować nasz nowy logger:

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

INSTRUKCJA OBSŁUGI URZĄDZENIA: HC8201

PARADYGMATY PROGRAMOWANIA Wykład 4

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Multimedia JAVA. Historia

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Część 4 życie programu

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

Rozdział 4. Rozpoczynanie, zawieszanie i kończenie pracy z systemem (33)

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Zapytanie ofertowe z zachowaniem Zasady konkurencyjności Nr SPNT/DED/04/2014

1/9. CCTV Tester. Instrukcja obsługi ver Wymagania systemowe: - Windows XP, Windows Vista, Windows 7 - wolny port USB -.NET Framework 3.

SFML. (Simple and Fast Multimedia Library)

Zofia Kruczkiewicz, ETE8305_2 1

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Programowanie obiektowe i zdarzeniowe

Spis treści. 1. Transcend SSD18C3 128GB Testy Podsumowanie Koniec spisu treści - Realitynet.pl - przystępnie o komputerach

Testowanie i wdrażanie oprogramowania Emulator systemu bankowego

Programowanie obiektowe

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Logowanie do mobilnego systemu CUI i autoryzacja kodami SMS

Programowanie obiektowe

Stacjonarne Wszystkie Katedra Inżynierii Produkcji dr Sławomir Luściński. Kierunkowy Nieobowiązkowy Polski Semestr trzeci. Semestr zimowy Brak Tak

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Programowanie obiektowe Wykład 7. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

Parowanie urządzeń Bluetooth. Instrukcja obsługi

Klasy i obiekty cz II

Stacjonarne Wszystkie Katedra Informatyki Stosowanej dr inż. Krzysztof Strzałkowski. Kierunkowy Nieobowiązkowy Polski Semestr piaty

Transkrypt:

Wprowadzenie do tworzenia zaawansowanych interfejsów graficznych: QGraphics View Framework vs. QML Jakub Bogacz Software Engineer Tieto, Jakub.Bogacz@tieto.com Patryk Górniak Software Engineer Tieto, Patryk.Górniak@tieto.com

Spis tre ci Krótkie przypomnienie Wst p do tworzenia graficznych interfejsów QGraphics View Framework

Krótkie przypomnienie

Czym jest QT Multiplatformowa biblioteka C++ Stworzona przez firm Trolltech, która zosta a przej ta (2008 rok) przez Noki Na licencji LGPL Przeznaczona g ównie do tworzenia interfejsów u ytkownika Du e wsparcie dla tworzenia aplikacji na urz dzenia mobilne G ówny sk adnik Maemo 5 oraz MeeGo Fundamentem biblioteki jest mechanizm sygna ów oraz slotów

Historia QT 1995 pierwsza wersja biblioteki (sprzedanych 18 licencji) 1997 u ycie Qt jako podstawowej biblioteki w KDE 1999 Qt 2.0 2001 Qt 3.0 wspierana równie dla MacOS 2005 Qt 4.0 wydane na licencji GPL 2007 Qt dla Javy (Qt Jambi) 2008 Nokia przejmuje Trolltech Stycze 2009 Qt 4.5 na licencji LGPL, wstrzymano rozwój Qt Jambi

Sloty i sygna y czyli krótkie przypomnienie - podstawy signals: void clicked(); public slots: void buttonclicked(); QObject::connect(&a, SIGNAL(clicked), &b, SLOT(buttonClicked)

Sloty i sygna y czyli krótkie przypomnienie - przyk ad #include <QObject> class Counter: public QObject { Q_OBJECT public: Counter() { m_value = 0; } int value() const { return m_value; } public slots: void setvalue(int value); signals: void valuechanged(int newvalue); private: int m_value; };

Sloty i sygna y czyli krótkie przypomnienie - przyk ad void Counter::setValue(int value) { if (value!= m_value) { m_value = value; emit valuechanged(value); } } Counter a, b; QObject::connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int)));

Wst p do tworzenia graficznych interfejsów 2010-03-26

Metody tworzenia interfejsów ytkownika Interfejsy ytkownika Interfejsy standardowe Interfejsy niestandardowe Komponenty QGraphics View Framework QML

Przyk ady standardowych interfejsów u ytkownika

Przyk ady niestandardowych interfejsów u ytkownika

Historia QCanvas: Qt 2.3(7.03.2001) Qt 4.2(4.10.2007) QGraphics View Framework: Qt 4.2(4.10.2007) -? QML (Qt Quick): Qt 4.7(21.09.2010) -?

Dost pno Komputery z zainstalowanymi bibliotekami QT Urz dzenia mobilne z systemami: Symbian S60 3rd Edition, Feature Pack 1 Nokia 5700 Nokia 6120 Nokia E51 Nokia E63 Nokia N76 Nokia N95 Symbian S60 3rd Edition, Feature Pack 2 Nokia 5320 Nokia 5730 Nokia 6220 Classic Nokia E52 Symbian S60 5th Edition, oraz nowsze wersje systemu Nokia 5250 Nokia 5530 Nokia N97 Maemo 5 Nokia N900 MeeGO

QGraphics View Framework 2010-03-26

QGraphics View Framework - wst p

QGraphicsScene Przechowywanie i zarz dzanie obiektami QGraphicsItem: Dodawanie: additem(), addtext(), addelipse(), addpath(), addrect() Pobieranie i usuwanie: item(), itemat(), remove(), removeat() Przekazywanie zdarze, a w szczególno ci obs ugi myszki i klawiatury do elementów sceny Konstruktor: QGraphicsScene::QGraphicsScene ( const QRectF & scenerect, QObject * parent = 0) QGraphicsScene::QGraphicsScene ( qreal x, qreal y, qreal width, qreal height, QObject * parent = 0 )

QGraphicsView Reprezentuje scen i odpowiada za jej wy wietlanie. Niezale nej wielko ci od sceny któr ma reprezentowa. Najwa niejsze metody: setscene() maptoscene(), mapfromscene(), itemat() show() hide()

Poka my scen #include <QApplication> #include gui.h int main(int argc, char *argv[]) { QApplication a(argc, argv); Gui* g = new Gui(); } return a.exec();

Poka my scen cd.. Gui::Gui(QObject *parent) : QObject(parent) { scene = new QGraphicsScene(0,0, 500, 500); scene->setbackgroundbrush(qbrush(qt::black)); view = new QGraphicsView(); view->setscene(scene); view->show(); }

Poka my scen cd..

QGraphicsItem Reprezentuje pojedynczy obiekt na scenie. Odbiera zdarzenia myszki oraz klawiatury (je eli ich obs uga zostanie zaimplementowana). virtual void paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 ) virtual QRectF boundingrect()

Rysujemy w asny obiekt trójk t void PictureItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { QPen pen(qt::white); pen.setwidth(4); painter->setpen(pen); } //Rysujemy trójk t painter->drawline(0, 0, 0, 100); painter->drawline(0, 0, 60, 50); painter->drawline(0, 100, 60, 50);

Rysujemy w asny obiekt trójk t QRectF PictureItem::boundingRect() const { return QRectF(0,0, 60, 100); }

Dodajemy trójk t do sceny Gui::Gui { rightbutton = new PictureItem(); rightbutton->setx(scene->width() rightbutton->boundingrect().width()); rightbutton->sety(scene->height()/2 - rightbutton->boundingrect().height()/2); scene->additem(rightbutton) }

Rysujemy w asny obiekt trójk t cd..

Dodajemy drugi trójk t Gui::Gui { leftbutton = new PictureItem(); leftbutton->setx(leftbutton-> boundingrect().width()); leftbutton->sety ((leftbutton>boundingrect().height() + scene->height())/2); leftbutton->rotate(180); scene->additem(leftbutton) }

Oto nasz efekt

Dodajemy obs ug myszki void PictureItem:: mousepressevent(qgraphicsscenemouseevent *event) { Q_UNUSED(event); } void PictureItem:: mousereleaseevent(qgraphicsscenemouseevent *event) { Q_UNUSED(event); emit clicked(); }

Wy wietlamy zdj cie PhotoItem::PhotoItem(QString pathtofile, QGraphicsObject *parent) : path(pathtofile), QGraphicsObject(parent) { //QPixmap pixmap = new QPixmap(); //QRectF rectangle rectangle.setrect(0,0, 300, 300); //nasza dodatkowa metoda updatepixmap(); }

Wy wietlamy zdj cie cd.. void PhotoItem::updatePixmap() { pixmap->load(path); scaledpixmap = pixmap->scaled (rectangle.size(), Qt::KeepAspectRatio); } QRectF PhotoItem::boundingRect() const { return rectangle; }

Wy wietlamy zdj cie cd.. void PhotoItem::paint(QPainter *painter,..,..) { painter->fillrect(rectangle, Qt::black); int x = (rectangle.width() scaledpixmap.width())/2; int y = (rectangle.height() scaledpixmap.height())/2; } painter->drawpixmap(x,y, scalledpximap.width(), scalledpximap.height(), scalledpximap);

Wy wietlamy zdj cie cd.. //Slot void PhotoItem::setCurrentPhoto(QString pathtofile) { path = pathtofile; updatepixmap(); update(rectangle); }

Logika galerii Klasa o nazwie CGallery Sloty: void on_nextbutton_clicked(); void on_prevbutton_clicked(); Sygna y void currentimage(qstring); void previmage(qstring); void nextimage(qstring); Publiczna zmienna QStringList filelist;

Pod czamy... Gui::Gui(...) { gallery = new CGallery(); photoitem = new PhotoItem( gallery->filelist.first()); photoitem->setx(100); photoitem->sety(100); scene->additem(photoitem); }

Efekty naszej pracy..

Pod czamy dalej... Gui::Gui { scene->additem(photoitem); connect(leftbutton, SIGNAL(clicked()), gallery, SLOT(on_prevButton_clicked())); connect(rightbutton, SIGNAL(clicked()), gallery, SLOT(on_nextButton_clicked())); connect(gallery, SIGNAL(currentImage(QString)), photoitem, SLOT(setCurrentPhoto(QString))); }

Co z pozosta ymi sygna ami? void Gui::setVisibleLeftButton(QString path) { if (path.isempty()) leftbutton->setvisible(false); } Gui::Gui(...) { connect(w, SIGNAL(prevImage(QString)), this, SLOT(setVisibleLeftButton(QString))); connect(w, SIGNAL(nextImage(QString)), this, SLOT(setVisibleRightButton(QString))); }

Jakub Bogacz Software Engineer Tieto, Jakub.Bogacz@tieto.com Patryk Górniak Software Engineer Tieto, Patryk.Gorniak@tieto.com