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

Podobne dokumenty
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

Qt sygnały i designer

Qt - podstawowe cechy

Wartości domyślne, przeciażenia funkcji

Lista dwukierunkowa - przykład implementacji destruktorów

Wartości domyślne, przeciażenia funkcji

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

Praca z aplikacją designer

Programowanie w środowiskach RAD Qt i C++

Konstruktor kopiujacy

Przykłady oprogramowania wykorzystujacego Qt

Wprowadzenie do szablonów szablony funkcji

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

Pola i metody statyczne

Wprowadzenie do szablonów szablony funkcji

Wyliczanie wyrażenia obiekty tymczasowe

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

Referencje do zmiennych i obiektów

Szablon klasy std::vector

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

Szablon klasy std::list

Wprowadzenie do szablonów klas

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Przesłanianie nazw, przestrzenie nazw

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

Informatyka 1. Przetwarzanie tekstów

wczesnej fazie rozwoju, zaimplementowano

Weryfikatory, zasoby graficzne

Programowanie obiektowe

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

Signals + Threads: Qt vs. Boost

Programowanie obiektowe

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.1

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

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

Klawisze funkcyjne w OpenOffice.org Writer

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

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

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

Szablony funkcji i szablony klas

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

Edytor tekstu Notatnik

Podejście obiektowe - podstawowe pojęcia

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

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

Qt hierarchia elementów graficznych

Program szkolenia PODSTAWY VBA (VISUAL BASIC FOR APPLICATIONS) I FORMULARZE.

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.1

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii

Podstawy programowania w Qt4

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

Programowanie w Javie 1 Wykład i Ćwiczenia 2 Przegląd podstawowych klas w Javie (elementy programowania obiektowego) Płock, 16 października 2013 r.

Operatory d - kasuj (do bufora tymczasowego) c - zmień y - zapamiętaj (yank) > - przesuń w prawo < - przesuń w lewo. Informatyka MPDI2. np.

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Wykład :37 PP2_W9

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

Wizualne tworzenie aplikacji z wykorzystaniem

Edytor tekstu MS Office Word

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

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

Skróty klawiaturowe w programie Microsoft Excel 2013

Klawiatura matrycowa

Zasady programowania Dokumentacja

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

Geneza powstania języka C++

Obiekty i metody stałe

Podstawy programowania obiektowego

Zaawansowane programowanie w C++

Style programowania - krótki przeglad

Tworzenie aplikacji w języku Java

Geneza powstania języka C++

Microsoft Visual C : praktyczne przykłady / Mariusz Owczarek. Gliwice, cop Spis treści

Klasa std::string. Bogdan Kreczmer. ZPCiR IIAiR PWr pokój 307 budynek C3.

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

Tworzenie i obsługa graficznego interfejsu uŝytkownika

Programowanie obiektowe i zdarzeniowe

Krótki kurs obsługi środowiska programistycznego Turbo Pascal z 12 Opracował Jan T. Biernat. Wstęp

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

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

EDYTOR TEKSTU - MICROSOFT WORD

Podejście obiektowe. Tablice (1) obiektów

Programowanie strukturalne i obiektowe

Dia rysowanie diagramów

INSTRUKCJE REPETYCYJNE PĘTLE

Programowanie obiektowe i C++ dla matematyków

Opis klawiatury komputerowej

Technologie cyfrowe semestr letni 2018/2019

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

Dodanie nowej formy do projektu polega na:

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

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

Style programowania - krótki przeglad

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

Programowanie w języku C++

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Visual Basic for Applications. Formatki tworzenie,

Transkrypt:

Qt - edycja, obsługa zdarzeń, rozmieszczenie kontrolek 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 z ninijeszą stroną tytułową.

Tekstowe okno edycyjne (cz. 1) Podstawowe własności okienka edycyjnego ( klasa QLineEdit): Możliwość pracy w trzech trybach (setmode): z echem (QLineEdit::Normal), bez echa (QLineEdit::NoEcho), hasło (QLineEdit: Przemieszanie kursora (home, end, cursorleft, setcursorposition, cursorwordforward), Zaznaczanie tekstu (setselection), Operacje na clipboard zie (copy, cut, paste), Sprawdzanie poprawności wprowadzonego tekstu (validateandset), Sygnały: zmiana tekstu (textchanged), naciśnięcie klawisza ENTER lub RETURN (returnpressed), Sloty: wstawianie ciągu znaków (settext, insert), selekcja i deselekcja (selectall, deselect), kasowanie (clear), usunięcie funkcji zatwierdzającej (clearvalidator).

Tekstowe okno edycyjne (cz. 2) class GlowneOkno : public QWidget Q_OBJECT public: QLabel _ProbkaTekstu; QLineEdit _OknoEdycyjne; GlowneOkno( QWidget rodzic=0, const char nazwa=0 ); public slots : void WezTekst(); void ZmienMod(); ;

Tekstowe okno edycyjne (cz. 3) void GlowneOkno::WezTekst() _ProbkaTekstu- settext(_oknoedycyjne- text()); void GlowneOkno::ZmienMod() char Tekst; int Dlugosc; QLineEdit::EchoMode Mod; switch ( _OknoEdycyjne- echomode() ) case QLineEdit::Normal: Tekst = "Mod: NoEcho"; Mod = QLineEdit::NoEcho; Dlugosc = 28; break ; case QLineEdit::NoEcho: Tekst = "Mod: Password"; Mod = QLineEdit::Password; Dlugosc = 8; break ; case QLineEdit::Password: Tekst = "Mod: Normal"; Mod = QLineEdit::Normal; Dlugosc = 32767; _OknoEdycyjne- setechomode(mod); _OknoEdycyjne- setmaxlength(dlugosc); _OknoEdycyjne- settext(); _ProbkaTekstu- settext(tekst); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,400,120); _ProbkaTekstu = new QLabel(" Mod domyślny: Normal ",this ); _ProbkaTekstu- setgeometry(40,5,190,30); _OknoEdycyjne = new QLineEdit(this ); _OknoEdycyjne- setgeometry(35,40,190,30); connect(_oknoedycyjne,signal(returnpressed()),this,slot(weztekst())); QPushButton Przycisk = new QPushButton("Zmień mod", this ); Przycisk- setgeometry(40,75,120,30); connect(przycisk,signal(clicked()),this,slot(zmienmod()));

Tekstowe okno edycyjne (cz. 4) void GlowneOkno::przeniesTekst() _ProbkaTekstu- settext(_zrooknoed- text()); _DocOknoEd- home(false); _ZroOknoEd- cut(); _DocOknoEd- paste(); void GlowneOkno::kasujZnak() _ZroOknoEd- del(); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,125,350,150); _ProbkaTekstu = new QLabel("Tu znajdze się tekst z okienka.",this ); _ProbkaTekstu- setgeometry(40,5,220,30); _ZroOknoEd = new QLineEdit(this ); _ZroOknoEd- setgeometry(35,40,190,30); connect(_zrooknoed,signal(returnpressed()),this,slot(przeniestekst())); _DocOknoEd = new QLineEdit(this ); _DocOknoEd- setgeometry(35,80,190,30); _DocOknoEd- setframe(false); _DocOknoEd- setreadonly(true); connect(_docoknoed,signal(returnpressed()),_docoknoed,slot(clear())); QPushButton Przycisk = new QPushButton("Przenies", this ); Przycisk- setgeometry(25,115,100,30); connect(przycisk,signal(clicked()),this,slot(przeniestekst())); Przycisk = new QPushButton("Kasuj", this ); Przycisk- setgeometry(135,115,100,30); connect(przycisk,signal(clicked()),this,slot(kasujznak()));

Wielowierszowe tekstowe okno edytora Podstawowe własności okna edytora ( klasa QMultiLineEdit): Możliwość pracy w trzech trybach (setmode): z echem (QLineEdit::Normal), bez echa (QLineEdit::NoEcho), hasło (QLineEdit: Przemieszanie kursora (home, end, cursorleft, setcursorposition, cursorwordforward), Zaznaczanie tekstu (setselection), Operacje na clipboard zie (copy, cut, paste), Sprawdzanie poprawności wprowadzonego tekstu (validateandset), Możliwość łamania słów (setwrappolicy), Operacje undo i redo, Operacja na liniach tekstu (insertline, removeline), Sygnały: zmiana tekstu (textchanged), naciśnięcie klawisza ENTER lub RETURN (returnpressed), osigalność operacji kopiowania (copyavailable), undo i redo, Sloty: wstawianie ciągu znaków (settext, insert), selekcja i deselekcja (selectall, deselect), kasowanie (clear), usunięcie funkcji zatwierdzającej (clearvalidator), kopiowanie tekstu kodowanego (pastesubtype).

Obsługa zdarzeń z klawiatury (cz. 1) program.h class GlowneOkno : public QMultiLineEdit Q_OBJECT void keypressevent(qkeyevent ); public: GlowneOkno( QWidget rodzic=0, const char nazwa=0 ); ; program.cpp

void GlowneOkno::keyPressEvent(QKeyEvent int NumLi,NumKo; QString Linia; wstanklaw) if (wstanklaw- state() == Qt::ControlButton) switch (wstanklaw- key()) case Qt::Key_Y: paste(); return ; case Qt::Key_T: getcursorposition(&numli,&numko); if (((Linia = textline(numli)).length() 2) (NumKo 1)) return ; if (Linia.length() = NumKo) setcursorposition(numli, NumKo); del(); backspace(); insertchar(linia[numko]); insertchar(linia[numko-1]); return ; case Qt::Key_U: undo(); return ; QMultiLineEdit::keyPressEvent(wStanKlaw); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,125,350,100);

Wykorzystanie Clipboard u program.h class OknoListy : public QWidget Q_OBJECT QListBox _Lista; public: OknoListy( QWidget rodzic, const char PLs, const char nazwa=0 ); public slots : void wstawdolisty(); void kopiujzlisty(const QString &Napis); ; class GlowneOkno : public QWidget Q_OBJECT public: GlowneOkno( QWidget rodzic=0, const char nazwa=0 ); ; program.cpp

void OknoListy::wstawDoListy() QString Tekst = QApplication::clipboard()- if (!Tekst.isNull()) _Lista- insertitem(tekst); return ; text(); void OknoListy::kopiujZListy(const QString &Napis) if (!Napis.isNull()) QApplication::clipboard()- settext(napis); return ; OknoListy::OknoListy(QWidget rodzic, const char PozLs, const char nazwa=0): QWidget(rodzic,nazwa) resize(150,300); _Lista = new QListBox(this ); _Lista- setgeometry( 5, 50, 145, 145); _Lista- insertitem(pozls); _Lista- insertitem(qpixmap("../xpm/door1.xpm")); connect(_lista,signal(highlighted(const QString&)),this,SLOT(kopiujZListy(const QString&))); QPushButton Przycisk = new QPushButton("Wstaw",this ); Przycisk- setgeometry(5,5,145,30); connect(przycisk,signal(clicked()),this,slot(wstawdolisty())); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,125,485,200); (new OknoListy(this,"Pozycja w liście 1."))- move(5,5); (new OknoListy(this,"Pozycja w liście 2."))- move(165,5); (new OknoListy(this,"Pozycja w liście 3."))- move(320,5);

Tworzenie rozkładu obiektów (cz. 1) GlowneOkno::GlowneOkno( QWidget Rodzic=0, const char Nazwa=0 ) setgeometry(100,100,400,100); QPushButton wprzycisk1 = new QPushButton("Przycisk 1",this ); wprzycisk1- setminimumsize(150,30); QPushButton wprzycisk2 = new QPushButton("Przycisk 2",this ); wprzycisk2- setminimumsize(150,30); QHBoxLayout wukladhor = new QHBoxLayout(this ); wukladhor- addwidget(wprzycisk1); wukladhor- addwidget(wprzycisk2);

Tworzenie rozkładu obiektów (cz. 2) GlowneOkno::GlowneOkno( QWidget Rodzic=0, const char Nazwa=0 ) setgeometry(100,100,400,100); QPushButton wprzycisk1 = new QPushButton("Przycisk 1",this ); wprzycisk1- setminimumsize(150,30); QPushButton wprzycisk2 = new QPushButton("Przycisk 2",this ); wprzycisk2- setminimumsize(150,30); QHBoxLayout wukladhor1 = new QHBoxLayout(); wukladhor1- addwidget(wprzycisk1); wukladhor1- addwidget(wprzycisk2); QPushButton wprzycisk3 = new QPushButton("Przycisk 3",this ); wprzycisk3- setminimumsize(80,30); QPushButton wprzycisk4 = new QPushButton("Przycisk 4",this ); wprzycisk4- setminimumsize(120,30); QPushButton wprzycisk5 = new QPushButton("Przycisk 5",this ); wprzycisk5- setminimumsize(120,30); QHBoxLayout wukladhor2 = new QHBoxLayout(); wukladhor2- addwidget(wprzycisk3); wukladhor2- addwidget(wprzycisk4); wukladhor2- addwidget(wprzycisk5); QVBoxLayout wukladwer = new QVBoxLayout(this ); wukladwer- addlayout(wukladhor1); wukladwer- addlayout(wukladhor2);

Tworzenie rozkładu obiektów (cz. 3) #define KOL_ETYKIETY 0 #define KOL_EDYTOR1W 1 #define KOL_EDYTORWW 2 GlowneOkno::GlowneOkno( QWidget Rodzic=0, const char Nazwa=0 ) setgeometry(100, 100, 400, 100); QGridLayout wkrata = new QGridLayout(this,0,0,10); for ( int wiersz = 0; wiersz 3; wiersz++) QLineEdit wedyt1w = new QLineEdit(this ); wkrata- addwidget(wedyt1w, wiersz, KOL_EDYTOR1W); QString Napis; Napis.sprintf("Wiersz &%i",wiersz+1); QLabel wetykieta = new QLabel(Napis,this ); wkrata- addwidget(wetykieta, wiersz, KOL_ETYKIETY); wetykieta- setbuddy(wedyt1w); QMultiLineEdit weditww = new QMultiLineEdit(this ); wkrata- addmulticellwidget(weditww, 0, -1, KOL_EDYTORWW, KOL_EDYTORWW); wkrata- setcolstretch(kol_edytor1w, 12); wkrata- setcolstretch(kol_edytorww, 23);