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

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

Qt - podstawowe cechy

Qt sygnały i designer

Lista dwukierunkowa - przykład implementacji destruktorów

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

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

Programowanie w środowiskach RAD Qt i C++

Wartości domyślne, przeciażenia funkcji

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

Praca z aplikacją designer

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Wartości domyślne, przeciażenia funkcji

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

Konstruktor kopiujacy

Wprowadzenie do szablonów szablony funkcji

Szablon klasy std::list

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów klas

Operacje wejścia/wyjścia (odsłona druga) - pliki

Sprawozdanie z wykonania projektu Dalmierz optyczny

Wyliczanie wyrażenia obiekty tymczasowe

Szablon klasy std::vector

Operacje wejścia/wyjścia odsłona pierwsza

Pola i metody statyczne

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

Referencje do zmiennych i obiektów

Przesłanianie nazw, przestrzenie nazw

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Programowanie obiektowe

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

Przykłady oprogramowania wykorzystujacego Qt

Podstawy programowania obiektowego

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

Signals + Threads: Qt vs. Boost

Programowanie telefonów z Windows Phone 7, cz. 4

Szablony funkcji i szablony klas

Co nie powinno być umieszczane w plikach nagłówkowych:

Programowanie obiektowe i C++ dla matematyków

Microsoft IT Academy kurs programowania

Wstęp do Programowania 2

PARADYGMATY PROGRAMOWANIA Wykład 3

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii

Qt po polsku. Bogdan Kreczmer.

Weryfikatory, zasoby graficzne

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:

//////////////////////////////////////////////////////////// // Kalkulator (prosty) - wersja agregowalna import "unknwn.idl";

Problem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.

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

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

Obiekty i metody stałe

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Wykład :37 PP2_W9

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Programowanie obiektowe

Informatyka 1. Przetwarzanie tekstów

Plik klasy. h deklaracje klas

Technologie cyfrowe semestr letni 2018/2019

wczesnej fazie rozwoju, zaimplementowano

Wykład 4: Klasy i Metody

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Programowanie 2. Język C++. Wykład 3.

Tworzenie aplikacji w języku Java

Algorytmy z powrotami. Algorytm minimax

Programowanie w języku C++

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

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

Zaawansowane programowanie w C++

Qt hierarchia elementów graficznych

Programowanie obiektowe w C++ Wykład 12

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie obiektowe

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

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

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

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

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

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

Pobieranie argumentów wiersza polecenia

Kalkulator. Programowanie komputerów. Kalkulator możliwe udoskonalenia. Kalkulator. Kalkulator. Kalkulator możliwe udoskonalenia

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie obiektowe i zdarzeniowe

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.

Informatyka. Wy-02 Tablice, wskaźniki, warunki i pętle. mgr inż. Krzysztof Kołodziejczyk

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Doxygen. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.

Podejście obiektowe - podstawowe pojęcia

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

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

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

Wizualizacja przejazdu labiryntu przez robota mobilnego typu Micromouse

Podstawy programowania obiektowego

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

Transkrypt:

Qt - dialogi Bogdan Kreczmer ZPCiR ICT PWR pokój 307 budynek C3 kreczmer@ict.pwr.wroc.pl Copyright c 2003 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępiony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem

Suwak GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,350,110); QPushButton Przycisk = new QPushButton("Jeden krok", this ); setgeometry(10,60,130,30); QLCDNumber Wyswietlacz = new QLCDNumber(this ); Wyswietlacz- move(230,16); Wyswietlacz- setsegmentstyle(qlcdnumber::filled); QSlider Suwak = new QSlider(10, 100, 10, 0, Horizontal, this ); Suwak- setgeometry(10,15,130,20); Suwak- settickmarks(qslider::below); connect(suwak,signal(slidermoved(int)),wyswietlacz,slot(display(int))); connect(suwak,signal(valuechanged(int)),wyswietlacz,slot(display(int))); connect(przycisk,signal(clicked()),suwak,slot(addstep()));

Okno numeryczne GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,350,110); QPushButton Przycisk = new QPushButton("Jeden krok", this ); setgeometry(10,60,130,30); QLCDNumber Wyswietlacz = new QLCDNumber(this ); Wyswietlacz- move(230,16); Wyswietlacz- setsegmentstyle(qlcdnumber::filled); QSpinBox OknoNumeryczne = new QSpinBox(0, 100, 5, this ); OknoNumeryczne- setgeometry(10,15,100,30); OknoNumeryczne- setsuffix( " mm" ); OknoNumeryczne- setspecialvaluetext( "Auto" ); connect(oknonumeryczne,signal(valuechanged(int)),wyswietlacz,slot(display(int))); connect(przycisk,signal(clicked()),oknonumeryczne,slot(stepup()));

Wizualizacja zaawansowania GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,220,90); QPushButton Przycisk = new QPushButton("Kasuj", this ); setgeometry(40,70,130,20); QSlider Suwak = new QSlider(10, 100, 10, 0, Horizontal, this ); Suwak- setgeometry(10,45,190,20); Suwak- settickmarks(qslider::above); QProgressBar Progres = new QProgressBar(100, this ); Progres- setgeometry(10,15,190,20); connect(suwak,signal(valuechanged(int)),progres,slot(setprogress(int))); connect(przycisk,signal(clicked()),progres,slot(reset()));

Standardowy dialog wyboru pliku program.h class GlowneOkno : public QWidget Q_OBJECT QLabel NazwaPliku; public: GlowneOkno( QWidget rodzic=0, const char nazwa=0 ); public slots : void WybieraniePliku(); ; program.cpp void GlowneOkno::WybieraniePliku() QString Nazwa = QFileDialog::getOpenFileName("./",".h"); NazwaPliku- settext(nazwa.isnull()? "???" : Nazwa); NazwaPliku- adjustsize(); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,340,80); NazwaPliku = new QLabel(this ); NazwaPliku- setgeometry(40,15,100,30); QPushButton Przycisk = new QPushButton("Wybierz plik", this ); setgeometry(30,35,130,30); connect(przycisk,signal(clicked()),(glowneokno )this,slot(wybieraniepliku()));

Standardowy dialog wyboru czcionki void GlowneOkno::WybieranieCzcionki() bool ok; QString Prefix; QFont Czcionka = QFontDialog::getFont(&ok,ProbkaTekstu- font()); if (ok) Prefix = "Nowa: "; ProbkaTekstu- setfont(czcionka); else Prefix = "Dotychczasowa: "; ProbkaTekstu- setfont(czcionka); QString Napis; QTextOStream(&Napis) Prefix "Przyklad tekstu (" Czcionka.family() " " Czcionka.pointSize() ")"; ProbkaTekstu- settext(napis); ProbkaTekstu- adjustsize(); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,340,80); ProbkaTekstu = new QLabel("Przykladowy tekst",this ); ProbkaTekstu- setgeometry(40,15,100,30); ProbkaTekstu- adjustsize(); QPushButton Przycisk = new QPushButton("Wybierz czcionkę", this ); setgeometry(50,45,160,30); connect(przycisk,signal(clicked()),this,slot(wybieranieczcionki()));

Standardowy dialog wyboru koloru void GlowneOkno::WybieranieKoloru() QColor Kolor = QColorDialog::getColor(backgroundColor()); if (Kolor.isValid()) setbackgroundcolor(kolor); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,340,80); QLabel ProbkaTekstu = new QLabel(" Tutuj jest wciaż to samo tło. ",this ); ProbkaTekstu- adjustsize(); ProbkaTekstu- move(40,15); QPushButton Przycisk = new QPushButton("Wybierz kolor", this ); setgeometry(50,45,160,30); connect(przycisk,signal(clicked()),this,slot(wybieraniekoloru()));

Stand. dialog poziomu zaawasnowania (tryb modalny) void GlowneOkno::RozpocznijOperacje() QProgressDialog DlgZaaw(" Coś się zaczęło dziać... ", "Przerwij",100,this,0,TRUE); _ProbkaTekstu- settext(" Zaczęło się!!! "); DlgZaaw.setProgress(0); for (int i = 1; i = 100; i++) qapp- processevents(); usleep(100000); // Tu właśnie coś się dzieje... if ( DlgZaaw.wasCancelled() ) break ; DlgZaaw.setProgress(i); _ProbkaTekstu- settext(" Już się skończyło!!! "); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,340,80); _ProbkaTekstu = new QLabel(" Teraz nie dzieje się nic. ",this ); _ProbkaTekstu- adjustsize(); _ProbkaTekstu- move(40,15); QPushButton Przycisk = new QPushButton("Rozpocznij", this ); setgeometry(50,45,160,30); connect(przycisk,signal(clicked()),this,slot(rozpocznijoperacje()));

Stand. dialog poziomu zaawasnowania (tryb niemodalny) void GlowneOkno::RozpocznijOperacje() _wdlgzaaw = new QProgressDialog(" Coś się zaczęło dziać... ", "Przerwij",100,this,0,FALSE); _wdlgzaaw- setcaption("tryb niemodalny"); connect( _wdlgzaaw, SIGNAL(cancelled()), this, SLOT(PrzerwijOperacje()) ); _ProbkaTekstu- settext(" Zaczęło się!!! "); _Krok = 0; _Stoper.start(100,TRUE); void GlowneOkno::PrzerwijOperacje() disconnect( _wdlgzaaw, SIGNAL(cancelled()), this, SLOT(PrzerwijOperacje()) ); _Stoper.stop(); _ProbkaTekstu- settext(" Zostało przerwane!!! "); if (_wdlgzaaw) delete _wdlgzaaw; _wdlgzaaw = NULL; void GlowneOkno::WykonajKrokOperacji() if ( ++_Krok _wdlgzaaw- totalsteps() ) PrzerwijOperacje(); return ; _wdlgzaaw- setprogress(_krok); _Stoper.start(100,TRUE); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ): _wdlgzaaw(null), _Stoper(this )... connect( &_Stoper, SIGNAL(timeout()), this, SLOT(WykonajKrokOperacji()) );

Wielokrotny dialog poziomu zaawasnowania program.h class KlasaOperacji: public QObject Q_OBJECT int _Krok; QProgressDialog _wdlgzaaw; QTimer _Stoper; GlowneOkno _wokno; public: KlasaOperacji(GlowneOkno ); public slots : void PrzerwijOperacje(); void WykonajKrokOperacji(); ; program.cpp void GlowneOkno::RozpocznijOperacje() new KlasaOperacji(this ); _ProbkaTekstu- settext(" Zaczęło się!!! "); void KlasaOperacji::PrzerwijOperacje() disconnect( _wdlgzaaw, SIGNAL(cancelled()), this, SLOT(PrzerwijOperacje()) ); _Stoper.stop(); _wokno- _ProbkaTekstu- settext(" Zostało przerwane!!! "); delete _wdlgzaaw; delete this ; void KlasaOperacji::WykonajKrokOperacji() if ( ++_Krok _wdlgzaaw- totalsteps() ) PrzerwijOperacje(); return ; _wdlgzaaw- setprogress(_krok); _Stoper.start(100,TRUE); KlasaOperacji::KlasaOperacji( GlowneOkno wokno ): _Krok(0), _wdlgzaaw(null), _wokno(wokno), _Stoper(this ) _wdlgzaaw = new QProgressDialog(" Coś się zaczęło dziać... ", "Przerwij",100,this,0,FALSE); _wdlgzaaw- setcaption("tryb niemodalny"); connect( _wdlgzaaw, SIGNAL(cancelled()), this, SLOT(PrzerwijOperacje()) ); connect( &_Stoper, SIGNAL(timeout()), this, SLOT(WykonajKrokOperacji()) ); _Stoper.start(100,TRUE);

program.h Własny dialog modalny class GlowneOkno : public QWidget Q_OBJECT... public slots : void RozpocznijDialog(); ; class DialogModalny: public QDialog Q_OBJECT public: DialogModalny(QWidget ); DialogModalny(); ; program.cpp void GlowneOkno::RozpocznijDialog() DialogModalny Dialog(this ); int wartosc = Dialog.exec(); switch (wartosc) case QDialog::Accepted: _ProbkaTekstu- settext(" Zaakceptowano!!! "); break ; case QDialog::Rejected: _ProbkaTekstu- settext(" Odrzucono!!! "); break ; DialogModalny::DialogModalny( QWidget parent ): QDialog(parent,"dialog",TRUE) setcaption("dialog"); QPushButton Przycisk = new QPushButton("Akceptuj", this ); setgeometry(10,60,130,30); connect(przycisk,signal(clicked()),this,slot(accept())); Przycisk = new QPushButton("Zaniechaj", this ); setgeometry(160,60,130,30); connect(przycisk,signal(clicked()),this,slot(reject()));

program.h Własny dialog niemodalny class DialogNiemodalny: public QDialog Q_OBJECT public: DialogNiemodalny(QWidget ); DialogNiemodalny(); public slots : void accept(); void reject(); ; program.cpp void GlowneOkno::RozpocznijOperacje() (new DialogModalny(this ))- show(); void DialogNiemodalny::accept() ((GlowneOkno ) parent())- _ProbkaTekstu- settext(" Zaakceptowano!!! "); delete this ; void DialogNiemodalny::reject() ((GlowneOkno ) parent())- _ProbkaTekstu- settext(" Odrzucono!!! "); delete this ; DialogNiemodalny::DialogNiemodalny( QWidget parent ): QDialog(parent,"dialog",FALSE) setcaption("dialog"); QPushButton Przycisk = new QPushButton("Akceptuj", this ); setgeometry(10,90,130,30); connect(przycisk,signal(clicked()),this,slot(accept())); Przycisk = new QPushButton("Zaniechaj", this ); setgeometry(160,90,130,30); connect(przycisk,signal(clicked()),this,slot(reject()));

connect(this,signal(applybuttonpressed()),parent,slot(akceptuj())); program.h Własny dialog stronicowany class GlowneOkno : public QWidget Q_OBJECT public: QLabel _ProbkaTekstu; QTabDialog _wdlg; GlowneOkno( QWidget rodzic=0, const char nazwa=0 ); public slots : void RozpocznijDialog(); void Akceptuj(); ; class DialogModalny: public QTabDialog... ; program.cpp void GlowneOkno::RozpocznijOperacje() (_wdlg = new DialogModalny(this ))- show(); void GlowneOkno::Akceptuj() disconnect(_wdlg,signal(applybuttonpressed()),this,slot(akceptuj())); _ProbkaTekstu- settext(" Zaakceptowano!!! "); delete _wdlg; DialogModalny::DialogModalny( QWidget parent ): QTabDialog(parent,"dialog",TRUE) setcaption("dialog Stronicowany"); setgeometry(30,30,300,200); QWidget wstr = new QWidget(this ); wstr- resize(280,270); (new QSlider(10, 100, 10, 0, Horizontal, wstr))- setgeometry(10,70,250,40); inserttab(wstr,"strona 1"); (wstr = new QWidget(this ))- resize(280,270); (new QSpinBox(0, 100, 5, wstr))- setgeometry(10,15,100,30); inserttab(wstr,"strona 2"); setokbutton("akceptuj"); setapplybutton("zastosuj"); setcancelbutton("zaniechaj");

Okna dialogu stronicowanego