Programowanie w środowiskach RAD Qt i C++

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

Qt sygnały i designer

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Qt - podstawowe cechy

Praca z aplikacją designer

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

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

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

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

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Zaawansowane programowanie w C++

Programowanie, część III

Podstawy programowania w Qt4

PARADYGMATY PROGRAMOWANIA Wykład 4

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Projektowanie klas c.d. Projektowanie klas przykład

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

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

PARADYGMATY PROGRAMOWANIA Wykład 3

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

Aplikacje w środowisku Java

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 3

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

Signals + Threads: Qt vs. Boost

Zofia Kruczkiewicz, ETE8305_2 1

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Zaawansowane programowanie w C++ (PCP)

Programowanie w języku C++

Szablony klas, zastosowanie szablonów w programach

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

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

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

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

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

Qt hierarchia elementów graficznych

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Programowanie w języku C++

Mechanizm dziedziczenia

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

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

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Projektowanie obiektowe. Roman Simiński Polimorfizm

Zaawansowane programowanie w języku C++ Klasy w C++

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Programowanie obiektowe w C++ Wykład 12

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

TEMAT : KLASY DZIEDZICZENIE

Wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

PARADYGMATY PROGRAMOWANIA Wykład 2

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Część 4 życie programu

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Aplikacje internetowe

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

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Rok akademicki: 2014/2015 Kod: MIO s Punkty ECTS: 4. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Wstęp do Programowania 2

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Podstawy programowania w języku C++

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

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

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

Wskaźniki. Informatyka

Programowanie obiektowe

Podstawy programowania skrót z wykładów:

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

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

Współbieżność w środowisku Java

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

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

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

wczesnej fazie rozwoju, zaimplementowano

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Instrukcja laboratoryjna cz.3

Podstawy Programowania Obiektowego

Zaawansowane programowanie w C++ (PCP)

Operatory na rzecz typu TString

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Wstęp do Programowania 2

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Transkrypt:

Programowanie w środowiskach RAD Qt i C++ Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Wprowadzenie do programowania w języku C++ z wykorzystaniem biblioteki Qt

Qt i QtCreator Aktualnie rozwój Qt jest nadzorowany przez firmę Diga: http://qt.digia.com/ Podstawowe źródło informacji oraz możliwość pobrania: http://qt-project.org/ 2

Zawartość pakietu QtCreator główne środowisko IDE. QtAssistant narzędzie wspomagające pracę z podpowiedziami i dokumentację, zintegrowane z QtCreator'em. QtDesigner narzędzie typu RAD, pozwalające na tworzenie warstwy wizualnej aplikacji, zintegrowane z QtCreator'em. QtLinguist narzędzie do przygotowywania różnych wersji językowych dla tworzonych programów. W środowisku Windows narzędzie typu command-line z odpowiednio ustalonymi zmiennymi środowiskowymi. 3

Programowanie sterowane zdarzeniami w Qt Qt realizuje funkcję głównej pętli zdarzeń, odpowiedzialnej za pobieranie informacji o zdarzeniach, ustalanie ich priorytetów, kolejkowanie, oraz ustalanie procedur obsługi poszczególnych zdarzeń. Programowanie GUI w Qtjest typowe dla EDP (ang. event driven programming) interfejs jest pasywny i reaguje na konkretne zdarzenia generowane przez mysz, klawiaturę, gesty, ekran dotykowy, zdarzenia programowe. Typowy program Qt tworze odpowiednie obiekty, łączy je oraz uaktywnia główną pętlę komunikatów obiektu klasy QApplication, poprzez wywołanie funkcji exec(): int main(int argc, char *argv[]) QApplication application(argc, argv); WindowDefinedByProgrammer window; window.show(); return application.exec(); 4

Qt Meta-Object System Rozszerzenia Qt oferowane przez Meta-Object System bazują na: Klasie QObject, stanowiącej bazą klasę dla wszystkich klas obiektów wykorzystujących rozszerzenia Qt. Makrodefinicji Q_OBJECT osadzonej w prywatnej sekcji klasy, makro pozwala na stosowanie mechanizmów typowych dla Qt. Kompilatorowi MOC (Meta-Object Compiler) realizującemu wstępne przetwarzanie kodu wykorzystującego rozszerzenia oferowane przez bibliotekę Qt. MOC przetwarza pliki źródłowe zawierające klasy wykorzystujące makro Q_OBJECT. MOC odpowiedzialny jest za działanie mechanizmu sygnałów i slotów, systemu dynamicznych właściwości, informacji RTTI. Aby wszystko poprawnie działało, Qt oferuje własną wersję programu make qmake. 5

QObject QObject to bazowa klasa dla wielu istotnych w Qt klas, np.: QEvent, QApplication, QLayout, QWidget. QObject pozwala na programowanie sterowane zdarzeniami, działanie klasy QApplication oraz realizację pętli komunikatów. QObject nie posiada publicznego konstruktora kopiującego oraz operatora przypisania obiekty tej klasy nie mogą być kopiowane, przekazywane przez wartość jako parametr oraz rezultat funkcji. Każde wystąpienie klasy QObject to obiekt o unikatowej tożsamości. class QObject public: explicit QObject(QObject* parent=0); QObject * parent () const; QString objectname() const;... ; QObject posiada jednoargumentowy konstruktor zdefiniowany jako explicit, co nie pozwala na stosowanie niejawnych konwersji konstruktorowych. 6

QObject, rodzic, dzieci, GUI Każdy QObject posiada najwyżej jednego rodzica klasy QObject oraz potencjalnie dużą liczbę potomków (dzieci), również klasy QObject. Każdy QObject przechowuje wskaźniki do swoich potomków w liście typu QObjectList (dokładniej: QList<QObject*>). Każdy rodzic zna adresy swoich potomków, każdy potomek zna adres swojego rodzica. Wszystkie elementy GUI w Qt pochodzą od klasy QWidget, a ta jest potomkiem QObject. Relacje rodzic-dziecko w przypadku GUI są łatwe do zrozumienia i odpowiadają hierarchii GUI. 7

Okno z przyciskiem zamykania wersja 1 Wykorzystanie slotu jako funkcji przypisanej do sygnału rozwiązane analogiczne do procedury obsługi zdarzenia (VCL, VisualStudio). 8

Okno z przyciskiem zamykania wersja 2 Wykorzystanie powiązania sygnał-slot rozwiązane z wykorzystaniem QtDesigner'a. Tryb edycji powiązań sygnał-slot 9

Okno z przyciskiem zamykania wersja 2 Informacje o powiązaniu sygnał-slot zapisywane są do pliku definicji okna głównego mainwindow.ui. 10

Okno z przyciskiem zamykania wersja 3 Wykorzystanie powiązania sygnał-slot wykorzystaniem makra connect w kodzie programu. #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) ui->setupui(this); connect(ui->pushbutton, SIGNAL(clicked()), this, SLOT( close())); MainWindow::~MainWindow() delete ui; 11

Program Średnie spalanie wersja 1 Obliczanie ile paliwa średnio zużył pojazd na dystansie 100km. Potrzebne informacje: przejechany dystans i ilość zużytego paliwa. Interfejs użytkownika: QlineEdit: lineeditdistance QPushButton: pushbuttoncalculate Pusty Qlabel: labelresult QlineEdit: lineeditfuel 12

Program Średnie spalanie wersja 1 Główne okno aplikacji jest obiektem klasy FuelWin, pochodnej w stosunku do QDialog. #ifndef FUELWIN_H #define FUELWIN_H #include <QDialog> namespace Ui class FuelWin; class FuelWin : public QDialog Q_OBJECT public: explicit FuelWin(QWidget *parent = 0); ~FuelWin(); private slots: void on_pushbuttoncalculate_clicked(); private: Ui::FuelWin *ui; ; #endif // FUELWIN_H Prototyp funkcji aktywowanej obliczającej średnie spalanie 13

Program Średnie spalanie wersja 1 Obliczenia zrealizowane w funkcji (slocie) statycznie powiązanej z sygnałem generowanym przez przycisk pushbuttoncalculate. void FuelWin::on_pushButtonCalculate_clicked() QString resultstr; bool convok; float dist = ui->lineeditdistance->text().tofloat( &convok ); float fuel = ui->lineeditfuel->text().tofloat( &convok ); if( convok && dist!= 0 ) resultstr.setnum( ( fuel * 100 ) / dist, 'f', 2 ); resultstr = " Ś rednie spalanie: " + resultstr; else resultstr = "Bł ę dne dane"; ui->labelresult->settext( resultstr ); ui->lineeditdistance->setfocus( Qt::TabFocusReason ); 14

Program Średnie spalanie wersja 2 Dodatkowy przycisk czyszczenia elementów okna. Obliczenia i czyszczenie zrealizowane w funkcjach (slotach) dynamicznie powiązanych z sygnałami clicked() przycisków pushbuttoncalculate oraz pushbuttonclear. QlineEdit: lineeditdistance QPushButton: pushbuttoncalculate QPushButton: pushbuttonclear Pusty Qlabel: labelresult QlineEdit: lineeditfuel 15

Program Średnie spalanie wersja 2 Definicja własnych slotów calculate i clear prototypy:... class FuelWin : public QDialog Q_OBJECT public: explicit FuelWin(QWidget *parent = 0); ~FuelWin(); private slots: void calculate(); void clear(); private: Ui::FuelWin *ui; ;... 16

Program Średnie spalanie wersja 2, definicja slotów void FuelWin::calculate() QString resultstr; bool convok; float dist = ui->lineeditdistance->text().tofloat( &convok ); float fuel = ui->lineeditfuel->text().tofloat( &convok ); if( convok && dist!= 0 ) resultstr.setnum( ( fuel * 100 ) / dist, 'f', 2 ); resultstr = " Ś rednie spalanie: " + resultstr; else resultstr = "Bł ę dne dane"; ui->labelresult->settext( resultstr ); ui->lineeditdistance->setfocus( Qt::TabFocusReason ); void FuelWin::clear() ui->lineeditdistance->settext( "" ); ui->lineeditfuel->settext( "" ); ui->labelresult->settext( "" ); ui->lineeditdistance->setfocus( Qt::TabFocusReason ); 17

Program Średnie spalanie wersja 2 Powiązanie sygnałow i slotów: FuelWin::FuelWin(QWidget *parent) : Qdialog(parent), ui(new Ui::FuelWin) ui->setupui(this); connect( ui->pushbuttoncalculate, SIGNAL(clicked()), this, SLOT(calculate())); connect( ui->pushbuttonclear, SIGNAL(clicked()), this, SLOT(clear())); 18

Program Średnie spalanie wersja 2 Obliczenia zrealizowane w funkcji (slocie) statycznie powiązanej z sygnałem generowanym przez przycisk pushbuttoncalculate. void FuelWin::on_pushButtonCalculate_clicked() QString resultstr; bool convok; float dist = ui->lineeditdistance->text().tofloat( &convok ); float fuel = ui->lineeditfuel->text().tofloat( &convok ); if( convok && dist!= 0 ) resultstr.setnum( ( fuel * 100 ) / dist, 'f', 2 ); resultstr = " Ś rednie spalanie: " + resultstr; else resultstr = "Bł ę dne dane"; ui->labelresult->settext( resultstr ); ui->lineeditdistance->setfocus( Qt::TabFocusReason ); 19

Dziękuję za uwagę Pytania? Polemiki? Teraz, albo: roman.siminski@us.edu.pl