Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00135 005893 13604111 na godz. na dobę w sumie
C++ i Qt. Wprowadzenie do wzorców projektowych. Wydanie II - książka
C++ i Qt. Wprowadzenie do wzorców projektowych. Wydanie II - książka
Autor: , Liczba stron: 640
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-8246-1 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> c++ - programowanie
Porównaj ceny (książka, ebook, audiobook).

Najlepsze wzorce dla C++ i Qt!

Język C++ przez długie lata był liderem wśród języków programowania i wciąż jest rozwijany. Qt to zestaw bibliotek pozwalający na tworzenie atrakcyjnego interfejsu użytkownika, działającego w różnych systemach operacyjnych - Windows, Mac OS X oraz Linux. Projekt jest intensywnie rozwijany od 1992 roku, a najnowsza wersja daje nawet możliwość tworzenia aplikacji internetowych czy mobilnych. Wykorzystanie możliwości C++ oraz potencjału Qt może dać niezwykłe efekty!

W trakcie lektury nauczysz się podstaw języka C++ i zgłębisz tajniki bibliotek Qt. Zdobędziesz interesujące informacje na temat wykorzystania kontenerów, metaobiektów, metawłaściwości i mechanizmu refleksji. Dowiesz się, jak wykorzystać wzorzec MVC (ang. Model-View-Controller) oraz w jaki sposób opanować problemy związane z programowaniem współbieżnym. Ponadto nauczysz się panować nad wskaźnikami i unikać typowych problemów związanych z dostępem do pamięci. Książka ta jest doskonałą pozycją dla wszystkich programistów C++, którzy chcą wzbogacić swój warsztat o bibliotekę Qt.

Dzięki tej książce:
- poznasz podstawy C++ oraz Qt
- opanujesz programowanie współbieżne
- zrozumiesz wzorzec MVC
- zbudujesz interesującą aplikację przy użyciu C++ i Qt

Wykorzystaj moc duetu: C++ i Qt!


Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: An Introduction to Design Patterns in C++ with Qt (2nd Edition) Tłumaczenie: Justyna Walkowska ISBN: 978-83-246-8246-1 Authorized translation from the English language edition, entitled: Introduction to Design Patterns in C++ with Qt, Second Edition; ISBN 0132826453; by Alan Ezust and Paul Ezust; published by Pearson Education, Inc; publishing as Prentice Hall. Copyright © 2012 Alan and Paul Ezust. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. Polish language edition published by HELION S.A., Copyright © 2014. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/cppqtw Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:258)ci S(cid:239)owo wst(cid:218)pne ........................................................................................................................................... 13 Przedmowa ................................................................................................................................................. 17 Przedmowa do wydania drugiego ......................................................................................................... 19 Podzi(cid:218)kowania .......................................................................................................................................... 21 O autorach .................................................................................................................................................. 25 Cz(cid:218)(cid:258)(cid:202) I. Wzorce projektowe i Qt .................................................................................. 27 Rozdzia(cid:239) 1. Wprowadzenie do C++ .................................................................................................... 29 1.1. Przegl(cid:200)d j(cid:218)zyka C++ ............................................................................................................................ 29 1.2. Krótka historia C++ ............................................................................................................................ 30 1.3. Pierwszy przyk(cid:239)ad .................................................................................................................................. 30 1.4. Standardowe wej(cid:258)cie i wyj(cid:258)cie .............................................................................................................. 33 1.5. Wprowadzenie do funkcji ..................................................................................................................... 36 1.6. qmake, pliki projektu i Makefile ........................................................................................................... 41 1.7. Pomocne zasoby w internecie .............................................................................................................. 46 1.8. (cid:146)a(cid:241)cuchy znaków .................................................................................................................................. 47 1.9. Strumienie ............................................................................................................................................. 48 1.10. Strumienie do plików .......................................................................................................................... 50 1.11. Okienka dialogowe Qt ........................................................................................................................ 54 1.12. Identyfikatory, typy i litera(cid:239)y ............................................................................................................... 57 1.13. Typy proste .......................................................................................................................................... 59 1.14. S(cid:239)owo kluczowe const ......................................................................................................................... 69 1.15. Wska(cid:283)niki i dost(cid:218)p do pami(cid:218)ci ............................................................................................................ 70 1.16. Referencje ............................................................................................................................................ 75 1.17. Ró(cid:285)nica pomi(cid:218)dzy const* a *const ..................................................................................................... 76 1.18. Powtórka .............................................................................................................................................. 79 Poleć książkęKup książkę 6 C++ i Qt. Wprowadzenie do wzorców projektowych Rozdzia(cid:239) 2. Pierwsza klasa ...................................................................................................................... 81 2.1. Na pocz(cid:200)tku by(cid:239)o struct ........................................................................................................................ 81 2.2. Definicje klas ......................................................................................................................................... 82 2.3. Modyfikatory dost(cid:218)pu do sk(cid:239)adowych ................................................................................................. 85 2.4. Enkapsulacja ........................................................................................................................................... 87 2.5. Wprowadzenie do UML ....................................................................................................................... 87 2.6. Przyjaciele klasy ..................................................................................................................................... 89 2.7. Konstruktory .......................................................................................................................................... 90 2.8. Destruktory ............................................................................................................................................ 92 2.9. S(cid:239)owo kluczowe static ........................................................................................................................... 93 2.10. Deklaracje i definicje klas .................................................................................................................... 97 2.11. Konstruktory kopiuj(cid:200)ce i operatory przypisania ................................................................................ 99 2.12. Konwersje .......................................................................................................................................... 101 2.13. Funkcje sk(cid:239)adowe const .................................................................................................................... 104 2.14. Podobiekty ......................................................................................................................................... 105 2.15. (cid:109)wiczenia: klasy ................................................................................................................................ 107 2.16. Pytania sprawdzaj(cid:200)ce znajomo(cid:258)(cid:202) rozdzia(cid:239)u ...................................................................................... 114 Rozdzia(cid:239) 3. Wprowadzenie do Qt ....................................................................................................... 119 3.1. Styl i konwencje nazewnicze .............................................................................................................. 119 3.2. Modu(cid:239) Qt Core ................................................................................................................................... 121 3.3. Qt Creator: zintegrowane (cid:258)rodowisko programistyczne dla Qt ....................................................... 124 3.4. (cid:109)wiczenia: wprowadzenie do Qt ....................................................................................................... 125 3.5. Powtórka .............................................................................................................................................. 126 Rozdzia(cid:239) 4. Listy ...................................................................................................................................... 127 4.1. Wprowadzenie do kontenerów ........................................................................................................... 127 4.2. Iteratory ................................................................................................................................................ 128 4.3. Relacje .................................................................................................................................................. 133 4.4. (cid:109)wiczenia: relacje ................................................................................................................................ 135 4.5. Powtórka .............................................................................................................................................. 137 Rozdzia(cid:239) 5. Funkcje ................................................................................................................................ 139 5.1. Prze(cid:239)adowywanie funkcji .................................................................................................................... 139 5.2. Argumenty opcjonalne ........................................................................................................................ 142 5.3. Prze(cid:239)adowywanie operatorów ............................................................................................................. 144 5.4. Przekazywanie parametrów przez warto(cid:258)(cid:202) ......................................................................................... 148 5.5. Przekazywanie parametrów przez referencj(cid:218) ..................................................................................... 149 5.6. Referencje do const ............................................................................................................................. 152 Poleć książkęKup książkę Spis tre(cid:258)ci 7 5.7. Warto(cid:258)ci zwracane przez funkcje ........................................................................................................ 154 5.8. Zwracanie referencji przez funkcje .................................................................................................... 154 5.9. Prze(cid:239)adowywanie w oparciu o const .................................................................................................. 155 5.10. Funkcje inline .................................................................................................................................... 157 5.11. Funkcje z list(cid:200) argumentów o zmiennej d(cid:239)ugo(cid:258)ci ........................................................................... 161 5.12. (cid:109)wiczenia: szyfrowanie ..................................................................................................................... 162 5.13. Powtórka ............................................................................................................................................ 164 Rozdzia(cid:239) 6. Dziedziczenie i polimorfizm ......................................................................................... 165 6.1. Proste dziedziczenie ............................................................................................................................ 165 6.2. Dziedziczenie i polimorfizm .............................................................................................................. 172 6.3. Dziedziczenie z abstrakcyjnej klasy bazowej ..................................................................................... 177 6.4. Projektowanie dziedziczenia ............................................................................................................... 182 6.5. Prze(cid:239)adowywanie, ukrywanie i przes(cid:239)anianie .................................................................................... 184 6.6. Konstruktory, destruktory i kopiuj(cid:200)ce operatory przypisania ........................................................... 186 6.7. Przetwarzanie argumentów z wiersza polece(cid:241) .................................................................................. 190 6.8. Kontenery ............................................................................................................................................ 195 6.9. Kontenery zarz(cid:200)dzaj(cid:200)ce, kompozycja i agregacja ............................................................................... 197 6.10. Kontenery wska(cid:283)ników ..................................................................................................................... 200 6.11. Powtórka ............................................................................................................................................ 215 Rozdzia(cid:239) 7. Biblioteki i wzorce projektowe ..................................................................................... 221 7.1. Budowanie i u(cid:285)ywanie bibliotek ........................................................................................................ 222 7.2. (cid:109)wiczenie: instalowanie bibliotek ...................................................................................................... 229 7.3. Frameworki i komponenty ................................................................................................................. 231 7.4. Wzorce projektowe .............................................................................................................................. 233 7.5. Powtórka .............................................................................................................................................. 240 Rozdzia(cid:239) 8. Klasy QObject i QApplication, sygna(cid:239)y i sloty ........................................................... 243 8.1. Warto(cid:258)ci i obiekty ................................................................................................................................ 246 8.2. Rodzice i dzieci: wzorzec Kompozyt ................................................................................................. 247 8.3. P(cid:218)tla zdarze(cid:241) w QApplication ............................................................................................................ 253 8.4. QObject i moc w pigu(cid:239)ce .................................................................................................................... 255 8.5. Sygna(cid:239)y i sloty ...................................................................................................................................... 255 8.6. Cykl (cid:285)ycia QObject ............................................................................................................................. 257 8.7. QTestLib .............................................................................................................................................. 258 8.8. (cid:109)wiczenia: QObject, QApplication, sygna(cid:239)y i sloty .......................................................................... 261 8.9. Powtórka .............................................................................................................................................. 261 Poleć książkęKup książkę 8 C++ i Qt. Wprowadzenie do wzorców projektowych Rozdzia(cid:239) 9. Wid(cid:285)ety i projektowanie interfejsów ............................................................................ 263 9.1. Kategorie wid(cid:285)etów ............................................................................................................................. 264 9.2. Designer: wprowadzenie ..................................................................................................................... 266 9.3. Okna dialogowe ................................................................................................................................... 269 9.4. Uk(cid:239)ad formularza ................................................................................................................................ 271 9.5. Ikonki, obrazki i zasoby ....................................................................................................................... 273 9.6. Uk(cid:239)ad wid(cid:285)etów .................................................................................................................................. 276 9.7. Integracja okienek z kodem ................................................................................................................ 283 9.8. (cid:109)wiczenia: formularze wej(cid:258)ciowe ...................................................................................................... 288 9.9. O p(cid:218)tli zdarze(cid:241) raz jeszcze .................................................................................................................. 289 9.10. Zdarzenia rysowania .......................................................................................................................... 297 9.11. Powtórka ............................................................................................................................................ 299 Rozdzia(cid:239) 10. G(cid:239)ówne okna i akcje ....................................................................................................... 301 10.1. QAction, QMenu, QMenuBar ........................................................................................................ 302 10.2. Obszary i dokowanie ......................................................................................................................... 309 10.3. QSettings: konfiguracja aplikacji ...................................................................................................... 311 10.4. Schowek i transfer danych ................................................................................................................ 314 10.5. Wzorzec Polecenie ............................................................................................................................ 315 10.6. Umi(cid:218)dzynarodawianie i funkcja tr() ................................................................................................ 322 10.7. (cid:109)wiczenia: G(cid:239)ówne okna i akcje ...................................................................................................... 323 10.8. Powtórka ............................................................................................................................................ 323 Rozdzia(cid:239) 11. Uogólnienia i kontenery ................................................................................................ 325 11.1. Typy uogólnione i szablony .............................................................................................................. 325 11.2. Typy uogólnione, algorytmy i operatory ......................................................................................... 331 11.3. Przyk(cid:239)ad sortowania mapy ................................................................................................................ 333 11.4. Funktory i wska(cid:283)niki na funkcje ...................................................................................................... 336 11.5. Wzorzec Py(cid:239)ek: klasy wspó(cid:239)dzielone przez domniemanie .............................................................. 338 11.6. (cid:109)wiczenia: typy uogólnione ............................................................................................................. 342 11.7. Powtórka ............................................................................................................................................ 343 Rozdzia(cid:239) 12. Metaobiekty, metaw(cid:239)a(cid:258)ciwo(cid:258)ci i mechanizm refleksji ........................................... 345 12.1. Wzorzec Metaobiekt i klasa QMetaObject ...................................................................................... 345 12.2. Identyfikacja typu i qobject_cast ....................................................................................................... 347 12.3. Macro Q_PROPERTY: opis w(cid:239)a(cid:258)ciwo(cid:258)ci QObject ........................................................................ 349 12.4. Klasa QVariant: dost(cid:218)p do w(cid:239)a(cid:258)ciwo(cid:258)ci ............................................................................................ 352 12.5. Dynamiczne w(cid:239)a(cid:258)ciwo(cid:258)ci .................................................................................................................. 355 12.6. Deklarowanie i rejestrowanie metatypów ........................................................................................ 358 Poleć książkęKup książkę Spis tre(cid:258)ci 9 12.7. Funkcja invokeMethod() .................................................................................................................. 360 12.8. (cid:109)wiczenia: refleksja ........................................................................................................................... 361 12.9. Powtórka ............................................................................................................................................ 361 Rozdzia(cid:239) 13. Modele i widoki ............................................................................................................... 363 13.1. Model-View-Controller (MVC) ...................................................................................................... 364 13.2. Modele i widoki Qt ........................................................................................................................... 365 13.3. Modele tabel ...................................................................................................................................... 375 13.4. Modele drzewiaste ............................................................................................................................. 384 13.5. Inteligentne wska(cid:283)niki ...................................................................................................................... 387 13.6. (cid:109)wiczenia: modele i widoki ............................................................................................................. 390 13.7. Powtórka ............................................................................................................................................ 391 Rozdzia(cid:239) 14. Walidacja i wyra(cid:285)enia regularne ................................................................................. 393 14.1. Maski wprowadzania danych ............................................................................................................ 393 14.2. Walidatory .......................................................................................................................................... 396 14.3. Wyra(cid:285)enia regularne .......................................................................................................................... 398 14.4. Walidacja wyra(cid:285)e(cid:241) regularnych ........................................................................................................ 406 14.5. Podklasy QValidator .......................................................................................................................... 407 14.6. (cid:109)wiczenia: walidacja i wyra(cid:285)enia regularne ..................................................................................... 410 14.7. Powtórka ............................................................................................................................................ 411 Rozdzia(cid:239) 15. Parsowanie XML ............................................................................................................. 413 15.1. Parsery XML w Qt ............................................................................................................................ 415 15.2. Parsowanie SAX ................................................................................................................................. 417 15.3. XML, struktury drzewiaste i DOM ................................................................................................. 421 15.4. Strumienie XML ............................................................................................................................... 429 15.5. Powtórka ............................................................................................................................................ 431 Rozdzia(cid:239) 16. Wi(cid:218)cej wzorców projektowych .................................................................................... 433 16.1. Wzorce konstrukcyjne ....................................................................................................................... 433 16.2. Wzorzec Pami(cid:200)tka ............................................................................................................................. 442 16.3. Wzorzec Fasada .................................................................................................................................. 447 16.4. Powtórka ............................................................................................................................................ 453 Rozdzia(cid:239) 17. Wspó(cid:239)bie(cid:285)no(cid:258)(cid:202) ................................................................................................................. 455 17.1. QProcess i zarz(cid:200)dzanie procesami .................................................................................................... 455 17.2. QThread i QtConcurrent ................................................................................................................. 468 17.3. (cid:109)wiczenia: QThread i QtConcurrent ............................................................................................. 480 17.4. Powtórka ............................................................................................................................................ 481 Poleć książkęKup książkę 10 C++ i Qt. Wprowadzenie do wzorców projektowych Rozdzia(cid:239) 18. Programowanie baz danych ......................................................................................... 483 18.1. Dost(cid:218)p do bazy danych z Qt: QSqlDatabase ................................................................................... 485 18.2. Zapytania i zestawy wyników ........................................................................................................... 488 18.3. Modele baz danych ............................................................................................................................ 490 18.4. Powtórka ............................................................................................................................................ 491 Cz(cid:218)(cid:258)(cid:202) II. Podstawy j(cid:218)zyka C++ .................................................................................. 493 Rozdzia(cid:239) 19. Typy i wyra(cid:285)enia ............................................................................................................. 495 19.1. Operatory ........................................................................................................................................... 495 19.2. Instrukcje i struktury kontroli .......................................................................................................... 500 19.3. Ewaluacja wyra(cid:285)e(cid:241) logicznych .......................................................................................................... 506 19.4. Typy wyliczeniowe ............................................................................................................................ 507 19.5. Typy ca(cid:239)kowite ze znakiem i bez znaku ........................................................................................... 509 19.6. Standardowa konwersja wyra(cid:285)e(cid:241) ...................................................................................................... 511 19.7. Konwersje jawne ................................................................................................................................ 514 19.8. Rzutuj bezpiecznie, u(cid:285)ywaj(cid:200)c rzutowania ANSI C++ .................................................................. 515 19.9. Przeci(cid:200)(cid:285)anie operatorów specjalnych ............................................................................................... 520 19.10. Identyfikacja typów w czasie wykonania programu ...................................................................... 525 19.11. Operatory wyboru sk(cid:239)adowych ....................................................................................................... 527 19.12. (cid:109)wiczenia: typy i wyra(cid:285)enia ............................................................................................................ 529 19.13. Powtórka .......................................................................................................................................... 530 Rozdzia(cid:239) 20. Zakres identyfikatorów i klasa pami(cid:218)ci ..................................................................... 531 20.1. Deklaracje i definicje ......................................................................................................................... 531 20.2. Zakres identyfikatorów ..................................................................................................................... 532 20.3. Klasa pami(cid:218)ci ..................................................................................................................................... 540 20.4. Przestrzenie nazw .............................................................................................................................. 544 20.5. Powtórka ............................................................................................................................................ 548 Rozdzia(cid:239) 21. Dost(cid:218)p do pami(cid:218)ci .......................................................................................................... 549 21.1. Patologia wska(cid:283)ników ....................................................................................................................... 550 21.2. Patologia wska(cid:283)ników na stercie ....................................................................................................... 552 21.3. Dost(cid:218)p do pami(cid:218)ci: podsumowanie ................................................................................................. 554 21.4. Wprowadzenie do tablic .................................................................................................................... 555 21.5. Arytmetyka wska(cid:283)ników ................................................................................................................... 556 21.6. Tablice, funkcje i warto(cid:258)ci zwracane ................................................................................................ 557 21.7. Ró(cid:285)ne rodzaje tablic .......................................................................................................................... 559 21.8. Dozwolone operacje na wska(cid:283)nikach ............................................................................................... 559 Poleć książkęKup książkę Spis tre(cid:258)ci 11 21.9. Tablice i pami(cid:218)(cid:202): wa(cid:285)ne informacje ................................................................................................. 561 21.10. (cid:109)wiczenia: dost(cid:218)p do pami(cid:218)ci ........................................................................................................ 562 21.11. Powtórka .......................................................................................................................................... 563 Rozdzia(cid:239) 22. Szczegó(cid:239)owo o dziedziczeniu ..................................................................................... 565 22.1. Wska(cid:283)niki wirtualne i tablice wirtualne ........................................................................................... 565 22.2. Polimorfizm i destruktory wirtualne ............................................................................................... 568 22.3. Wielokrotne dziedziczenie ................................................................................................................ 571 22.4. Dziedziczenie publiczne, chronione i prywatne .............................................................................. 577 22.5. Powtórka ............................................................................................................................................ 579 Cz(cid:218)(cid:258)(cid:202) III. Zadania programistyczne .......................................................................... 581 Rozdzia(cid:239) 23. (cid:109)wiczenia: szafa graj(cid:200)ca ............................................................................................... 583 23.1. Lista odtwarzania ............................................................................................................................... 584 23.2. Listy odtwarzania ............................................................................................................................... 585 23.3. Wybór (cid:283)ród(cid:239)a ..................................................................................................................................... 586 23.4. Listy odtwarzania w bazie danych .................................................................................................... 587 23.5. Rozszerzenie przyk(cid:239)adu Star Delegates ............................................................................................ 587 23.6. Sortowanie, filtrowanie i edycja list odtwarzania ............................................................................ 588 Dodatek A. S(cid:239)owa kluczowe j(cid:218)zyka C++ ......................................................................................... 589 Dodatek B. Standardowe nag(cid:239)ówki .................................................................................................... 591 Dodatek C. Narz(cid:218)dzia pracy programisty ........................................................................................ 593 Dodatek D. Przewodnik Alana: Debian w pigu(cid:239)ce dla programistów ....................................... 615 Dodatek E. Konfiguracja C++/Qt ...................................................................................................... 621 Bibliografia ............................................................................................................................................... 629 Skorowidz ................................................................................................................................................. 631 Poleć książkęKup książkę 12 C++ i Qt. Wprowadzenie do wzorców projektowych Poleć książkęKup książkę ROZDZIA(cid:272) 10 G(cid:239)ówne okna i akcje Wi(cid:218)kszo(cid:258)(cid:202) aplikacji QApplication opiera si(cid:218) na pojedynczym oknie QMainWindow. Jak poka- zuje rysunek 10.1, QMainWindow zawiera elementy niezb(cid:218)dne w wi(cid:218)kszo(cid:258)ci aplikacji desk- topowych: (cid:120) centralny wid(cid:285)et, (cid:120) pasek menu, (cid:120) paski narz(cid:218)dzi, (cid:120) pasek stanu, (cid:120) obszary (cid:239)(cid:200)czenia. RYSUNEK 10.1. G(cid:239)ówne okno W wi(cid:218)kszo(cid:258)ci aplikacji QMainWindow jest rodzicem (lub dziadkiem) obiektów QAction, QWidget i QObject na stercie. Cz(cid:218)sto stosowan(cid:200) praktyk(cid:200) jest rozszerzanie tej klasy, jak na przyk(cid:239)adzie 10.1. PRZYK(cid:146)AD 10.1. src/widgets/mainwindow/mymainwindow.h [...] class MyMainWindow : public QMainWindow { Q_OBJECT public: Poleć książkęKup książkę 302 Rozdzia(cid:239) 10. G(cid:239)ówne okna i akcje explicit MyMainWindow(QWidget* parent=0); void closeEvent(QCloseEvent* event); ///1 protected slots: virtual void newFile(); virtual void open(); virtual bool save(); [...] ///1 Metoda nadpisana, by przechwyci(cid:202) zdarzenie zamkni(cid:218)cia okna przez u(cid:285)ytkownika. 10.1. QAction, QMenu, QMenuBar Klasa QAction, dziedzicz(cid:200)ca z QObject, jest klas(cid:200) bazow(cid:200) dla akcji wybranych przez u(cid:285)yt- kownika. Ma ona bardzo bogaty interfejs, o czym wkrótce si(cid:218) przekonasz. Interfejs QWidget pozwala ka(cid:285)demu wid(cid:285)etowi na przechowywanie listy QList QAction* . Ka(cid:285)demu wid(cid:285)etowi mo(cid:285)e towarzyszy(cid:202) zestaw akcji. Niektóre wid(cid:285)ety wy(cid:258)wietlaj(cid:200) list(cid:218) akcji w menu kontekstowym, inne na pasku menu. Je(cid:258)li chcesz zapozna(cid:202) si(cid:218) z komple- tem informacji na temat tworzenia menu kontekstowych dla wid(cid:285)etów, zajrzyj do doku- mentacji setContextMenuPolicy(). Obiekty QMenu to równie(cid:285) wid(cid:285)ety QWidget, oferuj(cid:200)ce szczególny widok na kolekcj(cid:218) akcji QAction. Obiekt QMenuBar to zbiór menu, najcz(cid:218)(cid:258)ciej spotykany wewn(cid:200)trz QMainWindow. Je(cid:258)li rodzicem QMenu jest QMenuBar, QMenu jest widoczne jako menu rozwijane o znajomym interfejsie. Je(cid:258)li jego rodzicem nie jest QMenuBar, mo(cid:285)e ono wyskakiwa(cid:202) jak okno dialogowe — w takim przypadku jest nazywane menu kontekstowym1. Rodzicem QMenu mo(cid:285)e rów- nie(cid:285) by(cid:202) inne QMenu. Wówczas mamy do czynienia z podmenu. W celu u(cid:239)atwienia u(cid:285)ytkownikowi podj(cid:218)cia wyboru ka(cid:285)da akcja QAction jest wyposa- (cid:285)ona w nast(cid:218)puj(cid:200)ce elementy: (cid:120) tekst lub ikonka pojawiaj(cid:200)ce si(cid:218) w menu lub na przycisku; (cid:120) akcelerator, czyli klawisz skrótu; (cid:120) podpowied(cid:283) „Co to jest?”; (cid:120) mo(cid:285)liwo(cid:258)(cid:202) przestawiania stanu akcji pomi(cid:218)dzy nast(cid:218)puj(cid:200)cymi parami w(cid:239)a(cid:258)ciwo(cid:258)ci: widoczna/niewidoczna, dost(cid:218)pna/niedost(cid:218)pna, zaznaczona/niezaznaczona; (cid:120) sygna(cid:239)y changed() (zmiana), hovered() (najechanie mysz(cid:200)), toggled() (zmiana w(cid:239)a(cid:258)ciwo(cid:258)ci), triggered() (uruchomienie). Okno QMainWindow na rysunku 10.2 zawiera jeden pasek menu zawieraj(cid:200)cy jedno menu z dwiema akcjami do wyboru. 1 Menu kontekstowe najcz(cid:218)(cid:258)ciej aktywuje si(cid:218) poprzez klikni(cid:218)cie prawym przyciskiem myszy lub wci(cid:258)ni(cid:218)cie przycisku menu. Nazywamy je kontekstowym, poniewa(cid:285) jego zawarto(cid:258)(cid:202) zawsze jest zale(cid:285)na od kontekstu (który QWidget jest aktualnie zaznaczony lub aktywny). Poleć książkęKup książkę 10.1. QAction, QMenu, QMenuBar 303 RYSUNEK 10.2. QMenu Przyk(cid:239)ad 10.2 przedstawia kod u(cid:285)yty do stworzenia paska narz(cid:218)dzi z rysunku 10.2. Funk- cja QMainWindow::menuBar() zwraca wska(cid:283)nik na QMenuBar b(cid:218)d(cid:200)cy dzieckiem QMainWindow. Funkcja menuBar() tworzy i zwraca wska(cid:283)nik na pusty QMenuBar, je(cid:258)li pasek nie zosta(cid:239) jeszcze utworzony. PRZYK(cid:146)AD 10.2. src/widgets/dialogs/messagebox/dialogs.cpp [...] /* Umie(cid:258)(cid:202) menu na pasku */ QMenu* menu = new QMenu(tr( Pytania ), this); QMainWindow::menuBar()- addMenu(menu); /* Kilka opcji w menu */ menu- addAction(tr( Zadaj pytanie ), this, SLOT(askQuestion()), tr( Alt+Z )); menu- addAction(tr( Zadaj g(cid:239)upie pytanie ), this, SLOT(askDumbQuestion()), tr( Alt+G )); } Ka(cid:285)de wywo(cid:239)anie QMenu::addAction(text, target, slot, shortcut) tworzy nienazwany obiekt QAction i dodaje go do QMenu. Nast(cid:218)pnie wywo(cid:239)uje ukryt(cid:200) funkcj(cid:218) z klasy bazowej, QWidget::addAction(QAction*). Dodaje ona nowo powsta(cid:239)(cid:200) akcj(cid:218) do listy akcji, które zostan(cid:200) u(cid:285)yte w menu kontekstowym. Akcja zostanie dodana do listy QList QAction* przechowy- wanej przez menu. 10.1.1. QAction, QToolbar, QActionGroup Poniewa(cid:285) aplikacje pozwalaj(cid:200) u(cid:285)ytkownikom na wydawanie tych samych komend na ró(cid:285)ne sposoby (np. poprzez menu, przyciski, skróty klawiszowe), enkapsulacja takiej komendy do postaci akcji jest dobrym sposobem zapewnienia spójnego zachowania w ca(cid:239)ej aplikacji. Akcje QAction mog(cid:200) emitowa(cid:202) sygna(cid:239)y i pod(cid:239)(cid:200)cza(cid:202) je do slotów, je(cid:258)li jest to potrzebne. W aplikacjach Qt GUI akcje s(cid:200) z regu(cid:239)y „odpalane” na jeden z nast(cid:218)puj(cid:200)cych sposobów: (cid:120) u(cid:285)ytkownik klika opcj(cid:218) w menu, (cid:120) u(cid:285)ytkownik wprowadza skrót klawiszowy, (cid:120) u(cid:285)ytkownik klika przycisk na pasku narz(cid:218)dzi. Poleć książkęKup książkę 304 Rozdzia(cid:239) 10. G(cid:239)ówne okna i akcje Istnieje kilka prze(cid:239)adowanych postaci funkcji QMenu::addAction(). W przyk(cid:239)adzie 10.3 korzystamy z wersji odziedziczonej z QWidget, addAction(QAction*). Przyk(cid:239)ad 10.3 pokazuje, jak dodawa(cid:202) akcje do menu, grup akcji i pasków narz(cid:218)dzi. Na pocz(cid:200)tku tworzymy klas(cid:218) dziedzicz(cid:200)c(cid:200) z QMainWindow i dodajemy do niej kilka sk(cid:239)adowych QAction, a tak(cid:285)e grup(cid:218) QActionGroup i pasek narz(cid:218)dzi QToolBar. PRZYK(cid:146)AD 10.3. src/widgets/menus/study.h [...] class Study : public QMainWindow { Q_OBJECT public: explicit Study(QWidget* parent=0); public slots: void actionEvent(QAction* act); private: QActionGroup* actionGroup; QToolBar* toolbar; QAction* useTheForce; QAction* useTheDarkSide; QAction* studyWithObiWan; QAction* studyWithYoda; QAction* studyWithEmperor; QAction* fightYoda; QAction* fightDarthVader; QAction* fightObiWan; QAction* fightEmperor; protected: QAction* addChoice(QString name, QString text); }; [...] ///1 Do przechwytywania sygna(cid:239)ów. ///2 Do wy(cid:258)wietlania akcji jako przycisków. ///1 ///2 Konstruktor naszej klasy tworzy wymagane menu i instaluje je wewn(cid:200)trz paska QMenuBar b(cid:218)d(cid:200)cego integraln(cid:200) cz(cid:218)(cid:258)ci(cid:200) klasy bazowej. Odpowiedni kod zosta(cid:239) pokazany jako przy- k(cid:239)ad 10.4. PRZYK(cid:146)AD 10.4. src/widgets/menus/study.cpp [...] Study::Study(QWidget* parent) : QMainWindow(parent) { actionGroup = new QActionGroup(this); actionGroup- setExclusive(false); statusBar(); QWidget::setWindowTitle( zosta(cid:202) jedi chcesz? ); ///1 QMenu* useMenu = new QMenu( U(cid:285)yj , this); QMenu* studyMenu = new QMenu( Studiuj , this); Poleć książkęKup książkę 10.1. QAction, QMenu, QMenuBar 305 QMenu* fightMenu = new QMenu( Walcz , this); useTheForce = addChoice( useTheForce , U(cid:285)yj Mocy ); useTheForce- setStatusTip( To pocz(cid:200)tek podró(cid:285)y... ); useTheForce- setEnabled(true); useMenu- addAction(useTheForce); [...] ///2 studyWithObiWan = addChoice( studyWithObiWan , Ucz si(cid:218) u Obi-Wana ); studyMenu- addAction(studyWithObiWan); studyWithObiWan- setStatusTip( Z pewno(cid:258)ci(cid:200) otworzy przed Tob(cid:200) wiele drzwi... ); fightObiWan = addChoice( fightObiWan , Walcz z Obi-Wanem ); fightMenu- addAction(fightObiWan); fightObiWan- setStatusTip( W ten sposób z pewno(cid:258)ci(cid:200) nauczysz si(cid:218) od niego wielu sztuczek! ); [...] QMainWindow::menuBar()- addMenu(useMenu); QMainWindow::menuBar()- addMenu(studyMenu); QMainWindow::menuBar()- addMenu(fightMenu); toolbar = new QToolBar( Pasek wyboru , this); toolbar- addActions(actionGroup- actions()); ///3 QMainWindow::addToolBar(Qt::LeftToolBarArea, toolbar); QObject::connect(actionGroup, SIGNAL(triggered(QAction*)), this, SLOT(actionEvent(QAction*))); ///4 QWidget::move(300, 300); QWidget::resize(300, 300); } ///1 Niektóre z u(cid:285)ytych tu prefiksów NazwaKlasy:: nie s(cid:200) wymagane, poniewa(cid:285) funkcje mo(cid:285)na wywo(cid:239)a(cid:202) na this. Nazw klas mo(cid:285)na u(cid:285)y(cid:202), by wywo(cid:239)a(cid:202) wersj(cid:218) funkcji zdefiniowan(cid:200) w konkretnej nadklasie lub by pokaza(cid:202) czytelnikowi kodu, któr(cid:200) wersj(cid:218) wywo(cid:239)ujemy. ///2 Akcja jest ju(cid:285) w QActionGroup, ale dodajemy j(cid:200) tak(cid:285)e do QMenu. ///3 W ten sposób uzyskujemy widoczne przyciski w dokowanym (przy(cid:239)(cid:200)czanym) wid(cid:285)ecie dla ka(cid:285)dej z QAction. ///4 Zamiast pod(cid:239)(cid:200)cza(cid:202) sygna(cid:239) ka(cid:285)dej z akcji, (cid:239)(cid:200)czymy si(cid:218) jedynie z zawieraj(cid:200)c(cid:200) je wszystkie grup(cid:200) ActionGroup. Istnieje mo(cid:285)liwo(cid:258)(cid:202) pod(cid:239)(cid:200)czenia poszczególnych sygna(cid:239)ów triggered() akcji do poszcze- gólnych slotów. W przyk(cid:239)adzie 10.5 grupujemy powi(cid:200)zane ze sob(cid:200) akcje wewn(cid:200)trz QAction (cid:180)Group. Je(cid:258)li „odpalona” zostanie jedna z akcji z grupy, QAction wyemituje pojedynczy sygna(cid:239) triggered(QAction*), który pozwala na obs(cid:239)ug(cid:218) wszystkich akcji w ujednolicony sposób. Sygna(cid:239) przekazuje wska(cid:283)nik na konkretn(cid:200) odpalon(cid:200) akcj(cid:218), zatem mo(cid:285)na wybra(cid:202) odpowiedni(cid:200) dla niej reakcj(cid:218). Poleć książkęKup książkę 306 Rozdzia(cid:239) 10. G(cid:239)ówne okna i akcje PRZYK(cid:146)AD 10.5. src/widgets/menus/study.cpp [...] // Funkcja wytwórcza (fabryka) produkuj(cid:200)ca akcje QAction inicjalizowane w ujednolicony sposób QAction* Study::addChoice(QString name, QString text) { QAction* retval = new QAction(text, this); retval- setObjectName(name); retval- setEnabled(false); retval- setCheckable(true); actionGroup- addAction(retval); return retval; } ///1 ///1 Dodaj ka(cid:285)d(cid:200) akcj(cid:218) do QActionGroup, dzi(cid:218)ki czemu potrzebny b(cid:218)dzie tylko jeden sygna(cid:239) pod(cid:239)(cid:200)czony do jednego slotu. Po stworzeniu akcji QAction jest ona dodawana (za pomoc(cid:200) addAction()) do trzech innych obiektów: 1. QActionGroup — w celu obs(cid:239)ugi sygna(cid:239)ów. 2. QMenu — jednego z trzech menu rozwijanych na pasku QMenuBar. 3. QToolBar — gdzie zostanie udost(cid:218)pniona jako przycisk. Dla urozmaicenia przyk(cid:239)adu wprowadzili(cid:258)my pewne zale(cid:285)no(cid:258)ci logiczne pomi(cid:218)dzy opcjami w menu, odpowiadaj(cid:200)ce fabu(cid:239)om kilku znanych filmów. S(cid:200) one widoczne w funkcji actionEvent() z przyk(cid:239)adu 10.6. PRZYK(cid:146)AD 10.6. src/widgets/menus/study.cpp [...] void Study::actionEvent(QAction* act) { QString name = act- objectName(); QString msg = QString(); if (act == useTheForce ) { // u(cid:285)yj Mocy studyWithObiWan- setEnabled(true); // ucz si(cid:218) u Obi-Wana fightObiWan- setEnabled(true); // walcz z Obi-Wanem useTheDarkSide- setEnabled(true); // u(cid:285)yj ciemnej strony Mocy } if (act == useTheDarkSide) { // u(cid:285)yj ciemnej strony Mocy studyWithYoda- setEnabled(false); // ucz si(cid:218) u Yody fightYoda- setEnabled(true); // walcz z Yod(cid:200) studyWithEmperor- setEnabled(true); // ucz si(cid:218) u Imperatora fightEmperor- setEnabled(true); // walcz z Imperatorem fightDarthVader- setEnabled(true); // walcz z Darthem Vaderem } if (act == studyWithObiWan) { // ucz si(cid:218) u Obi-Wana fightObiWan- setEnabled(true); // walcz z Obi-Wanem fightDarthVader- setEnabled(true); // walcz z Darthem Vaderem studyWithYoda- setEnabled(true); // ucz si(cid:218) u Yody } [...] Poleć książkęKup książkę 10.1. QAction, QMenu, QMenuBar 307 if (act == fightObiWan ) { if (studyWithEmperor- isChecked()) { msg = Wygra(cid:239)e(cid:258)! ; } else { msg = Przegra(cid:239)e(cid:258). ; act- setChecked(false); studyWithYoda- setEnabled(false); } } [...] if (msg != QString()) { QMessageBox::information(this, Wynik , msg, ok ); } } Poniewa(cid:285) wszystkie akcje nale(cid:285)(cid:200) do QActionGroup, sygna(cid:239) triggered(QAction*) powoduje wywo(cid:239)anie actionEvent(). Wszystkie opcje w menu poza jedn(cid:200) s(cid:200) pocz(cid:200)tkowo nieaktywne. W miar(cid:218) jak u(cid:285)ytkow- nik wybiera spo(cid:258)ród dost(cid:218)pnych opcji, inne staj(cid:200) si(cid:218) dost(cid:218)pne lub nie, co pokazuje rysu- nek 10.3. Zwró(cid:202) uwag(cid:218) na spójno(cid:258)(cid:202) pomi(cid:218)dzy przyciskami i opcjami w menu. Klikni(cid:218)cie aktywnego przycisku powoduje zaznaczenie odpowiadaj(cid:200)cego mu elementu w menu. Akcja QAction przechowuje stan (dost(cid:218)pna/zaznaczona), a QMenu i QToolBar to widoki tej akcji. RYSUNEK 10.3. Wybór akcji z menu i pasków narz(cid:218)dzi 10.1.2. (cid:109)wiczenie: GUI dla gry w karty Napisz gr(cid:218) oczko (blackjack). Mo(cid:285)liwe s(cid:200) nast(cid:218)puj(cid:200)ce akcje: (cid:120) nowa gra, (cid:120) rozdaj karty, (cid:120) tasuj, (cid:120) dobierz, Poleć książkęKup książkę 308 Rozdzia(cid:239) 10. G(cid:239)ówne okna i akcje (cid:120) zosta(cid:241) (nie dobieramy nowej karty), (cid:120) wyjd(cid:283). Akcje powinny by(cid:202) dost(cid:218)pne poprzez pasek menu oraz przez pasek narz(cid:218)dzi. Aplikacja powinna przypomina(cid:202) t(cid:218) przedstawion(cid:200) na rysunku 10.4. Przejd(cid:283)my do zwi(cid:218)z(cid:239)ego omówie- nia regu(cid:239) gry. RYSUNEK 10.4. Zrzut ekranu gry w oczko Na pocz(cid:200)tku gry u(cid:285)ytkownik oraz rozdaj(cid:200)cy otrzymuj(cid:200) po dwie karty. U(cid:285)ytkownik mo(cid:285)e zero lub wi(cid:218)cej razy dobra(cid:202) karty. Ka(cid:285)de dobranie powoduje dodanie do r(cid:218)ki u(cid:285)ytkownika jednej karty. U(cid:285)ytkownik ko(cid:241)czy dobieranie, wykonuj(cid:200)c akcj(cid:218) Zosta(cid:241). Celem gry jest uzyskanie najwi(cid:218)kszej liczby punktów, przy czym nie mo(cid:285)e ona prze- kracza(cid:202) 21. Zasady ewaluacji r(cid:218)ki s(cid:200) nast(cid:218)puj(cid:200)ce: figury (walet, królowa, król) maj(cid:200) po 10 punktów, as to 1 lub 11 — w zale(cid:285)no(cid:258)ci od tego, co akurat odpowiada graczowi. Pozosta(cid:239)e karty maj(cid:200) warto(cid:258)(cid:202) punktow(cid:200) równ(cid:200) ich numerowi. Je(cid:258)li masz na r(cid:218)ce asa i waleta, lepiej jest poli- czy(cid:202) asa za 11 punktów, co (cid:239)(cid:200)cznie daje upragnione 21. Natomiast je(cid:258)li masz na r(cid:218)ce 7 i 8, a wyci(cid:200)gniesz asa, lepiej przypisa(cid:202) mu warto(cid:258)(cid:202) 1. Je(cid:258)li gracz przekroczy 21 punktów, automatycznie przegrywa i rozdanie dobiega ko(cid:241)ca. Je(cid:258)li gracz ma na r(cid:218)ce pi(cid:218)(cid:202) kart, których suma nie przekracza 21 — wygrywa. Po tym jak gracz wygra, przegra lub zostanie (nie dobiera karty) rozdaj(cid:200)cy dobiera dowolnie wiele kart tak d(cid:239)ugo, dopóki nie przekroczy liczby 18. Gdy to nast(cid:200)pi, rozdaj(cid:200)cy musi zosta(cid:202), a gra si(cid:218) ko(cid:241)czy. Wygrywa gracz, którego wynik jest bli(cid:285)szy (lecz nie wi(cid:218)kszy ni(cid:285)) 21. Je(cid:258)li obaj gracze maj(cid:200) po tyle samo punktów, wygrywa rozdaj(cid:200)cy. Po zako(cid:241)czeniu rozdania u(cid:285)ytkownik mo(cid:285)e wybiera(cid:202) jedynie spo(cid:258)ród akcji: Rozdaj, Nowa gra i Wyjd(cid:283) (Dobierz i Zosta(cid:241) s(cid:200) niedost(cid:218)pne). Poleć książkęKup książkę 10.2. Obszary i dokowanie 309 Po wybraniu przez u(cid:285)ytkownika akcji Rozdaj opcja ta staje si(cid:218) nieaktywna a(cid:285) do zako(cid:241)- czenia rozdania. Aplikacja powinna pami(cid:218)ta(cid:202) liczb(cid:218) gier wygranych przez u(cid:285)ytkownika i przez rozdaj(cid:200)- cego, przyznaj(cid:200)c im jeden „du(cid:285)y” punkt za wygranie rozdania. Wyniki powinny by(cid:202) wy(cid:258)wie- tlane nad kartami gracza. Rozdawaj karty bez resetowania talii do momentu, w którym karty si(cid:218) sko(cid:241)cz(cid:200) lub u(cid:285)ytkownik wybierze akcj(cid:218) Rozdaj. Spróbuj wykorzysta(cid:202) w programie klas(cid:218) CardDeck i inne klasy utworzone w ramach (cid:202)wicze(cid:241) i przyk(cid:239)adów z sekcji 6.9.1. Dodaj do gry grafik(cid:218), wy(cid:258)wietlaj(cid:200)c wizualizacje ka(cid:285)dej z kart, na przyk(cid:239)ad w sposób przedstawiony w podrozdzia(cid:239)ach 9.5 i 9.6. Stwórz menu rozwijane i pasek narz(cid:218)dzi z akcjami. Dobierz i Zosta(cid:241) maj(cid:200) by(cid:202) dost(cid:218)pne dopiero po rozdaniu kart. Poka(cid:285), ile kart zosta(cid:239)o jeszcze w talii, korzystaj(cid:200)c z przewijanego pola QSpinBox w wersji tylko do odczytu. Akcja Nowa gra powinna zerowa(cid:202) zapami(cid:218)tan(cid:200) liczb(cid:218) gier wygranych i przegranych przez graczy oraz resetowa(cid:202) tali(cid:218). Sugestie projektowe Staraj si(cid:218) rozdzieli(cid:202) klasy modelu od klas widoku — nie wprowadzaj kodu GUI do klas modelu. Rozdzia(cid:239) modelu od widoku to dobra praktyka programistyczna, u(cid:239)atwiaj(cid:200)ca utrzy- mywanie projektu. Rysunek 10.5 przedstawia jeden z mo(cid:285)liwych projektów aplikacji. 10.2. Obszary i dokowanie Ka(cid:285)da klasa dziedzicz(cid:200)ca z QMainWindow ma obszary dokowania okien, po jednym z ka(cid:285)dej strony wid(cid:285)etu centralnego, jak pokazuje rysunek 10.6. Obszary te s(cid:200) u(cid:285)ywane do pod- (cid:239)(cid:200)czania (dokowania) okien pomocniczych do wid(cid:285)etu centralnego. O QDockWidget mo(cid:285)na my(cid:258)le(cid:202) jako o kopercie na inny wid(cid:285)et. Ma on pasek tytu(cid:239)u i obszar tre(cid:258)ci, w którym mo(cid:285)na umie(cid:258)ci(cid:202) inny wid(cid:285)et. W zale(cid:285)no(cid:258)ci od konfiguracji atrybutów QDockWidget mo(cid:285)e by(cid:202) od(cid:239)(cid:200)czany (wówczas „p(cid:239)ywa”), rozci(cid:200)gany, zamykany, przeci(cid:200)gany w inne miejsce lub pod(cid:239)(cid:200)czany do tego samego lub innego obszaru dokowania — na (cid:285)ycze- nie u(cid:285)ytkownika ko(cid:241)cowego. Dozwolona jest sytuacja, w której kilka takich wid(cid:285)etów zaj- muje ten sam obszar dokowania. Okno QMainWindow poprawnie tworzy przeci(cid:200)galne obszary QSplitter pomi(cid:218)dzy wid(cid:285)e- tem centralnym a wid(cid:285)etami QDockWidget. G(cid:239)ówne okno ma dwie podstawowe funkcje do zarz(cid:200)dzania obszarami dokowania: Poleć książkęKup książkę 310 Rozdzia(cid:239) 10. G(cid:239)ówne okna i akcje RYSUNEK 10.5. Diagram klas UML dla gry w oczko (klasy: BlackJack — oczko, Deck — talia, HandView — widok r(cid:218)ki, Hand — r(cid:218)ka, Card — karta) RYSUNEK 10.6. Obszary dokowania QMainWindow 1. setCentralWidget(QWidget*) — ustawia wid(cid:285)et centralny; 2. addDockWidget(Qt::DockWidgetAreas, QDockWidget*) — dodaje podany QDockWidget do okre(cid:258)lonego obszaru dokowania. Okna dokowane pe(cid:239)ni(cid:200) istotn(cid:200) rol(cid:218) w zintegrowanych (cid:258)rodowiskach programistycznych, poniewa(cid:285) w ró(cid:285)nych sytuacjach wymagane s(cid:200) ró(cid:285)ne zestawy narz(cid:218)dzi i widoki. Ka(cid:285)de okno dokowane jest wid(cid:285)etem, który mo(cid:285)na do(cid:258)(cid:202) (cid:239)atwo „podpi(cid:200)(cid:202)” do g(cid:239)ównego okna, jak poka- zuje rysunek 10.7. Poleć książkęKup książkę 10.3. QSettings: konfiguracja aplikacji 311 RYSUNEK 10.7. P(cid:239)ywaj(cid:200)ce okna QDockWindow w Designerze Jak wi(cid:218)kszo(cid:258)(cid:202) aplikacji Qt, równie(cid:285) Designer — narz(cid:218)dzie do projektowania i tworzenia interfejsów u(cid:285)ytkownika — intensywnie korzysta z okien dokowanych. Designer sk(cid:239)ada si(cid:218) z Edytora wid(cid:285)etów (wid(cid:285)et centralny) i dokowanych widoków narz(cid:218)dzi takich jak: (cid:120) Panel wid(cid:285)etów, (cid:120) Inspektor obiektów, (cid:120) Edytor w(cid:239)a(cid:258)ciwo(cid:258)ci, (cid:120) Edytor sygna(cid:239)ów / slotów, (cid:120) Edytor akcji, (cid:120) Edytor zasobów. Pod(cid:239)(cid:200)czane okna nie zawsze musz(cid:200) by(cid:202) widoczne, dlatego mo(cid:285)na sterowa(cid:202) ich wy(cid:258)wie- tlaniem za pomoc(cid:200) menu Widok (View). Jest ono zwracane przez funkcj(cid:218) QMainWindow::create (cid:180)PopupMenu(), co pozwala na odwo(cid:239)ywanie si(cid:218) do niego z menu kontekstowych i doda- wanie go do pasków narz(cid:218)dzi i menu rozwijanych. 10.3. QSettings: konfiguracja aplikacji Wi(cid:218)kszo(cid:258)(cid:202) aplikacji pozwala u(cid:285)ytkownikom na konfiguracj(cid:218) ustawie(cid:241). Ustawienia (opcje, preferencje) powinny by(cid:202) trwa(cid:239)e. W(cid:239)a(cid:258)nie w tym celu wprowadzono QSettings. Obiekt QSettings (ustawienia) musi przed pierwszym u(cid:285)yciem zosta(cid:202) zainicjalizowany nast(cid:218)puj(cid:200)cymi warto(cid:258)ciami: nazwa aplikacji, nazwa organizacji, domena organizacji. Te wymagania chroni(cid:200) przed przypadkowym nadpisaniem ustawie(cid:241) jednej aplikacji przez ustawienia drugiej. Je(cid:258)li jednak informacje te s(cid:200) ju(cid:285) w posiadaniu QApplication, jak w przyk(cid:239)a- dzie 10.7, to konstruktor domy(cid:258)lny QSettings mo(cid:285)e ich u(cid:285)y(cid:202) ponownie. Poleć książkęKup książkę 312 Rozdzia(cid:239) 10. G(cid:239)ówne okna i akcje PRZYK(cid:146)AD 10.7. src/widgets/mainwindow/mainwindow-main.cpp #include mymainwindow.h #include QApplication int main( int argc, char ** argv ) { QApplication app( argc, argv ); app.setOrganizationName( objectlearning ); app.setOrganizationDomain( objectlearning.net ); app.setApplicationName( mainwindow-test ); MyMainWindow mw; mw.show(); return app.exec(); } Po takiej inicjalizacji QApplication mo(cid:285)liwe jest utworzenie instancji QSettings z wyko- rzystaniem konstruktora domy(cid:258)lnego. Kiedy tworzysz aplikacj(cid:218) opart(cid:200) na QMainWindow, jednymi z pierwszych ustawie(cid:241), które b(cid:218)dziesz chcia(cid:239) pami(cid:218)ta(cid:202), b(cid:218)d(cid:200) rozmiar i po(cid:239)o(cid:285)enie okna. By(cid:202) mo(cid:285)e zechcesz równie(cid:285) zapa- mi(cid:218)ta(cid:202) nazwy ostatnich dokumentów otwieranych przez aplikacj(cid:218). Obiekt QSettings przechowuje trwa(cid:239)e mapy par klucz i warto(cid:258)(cid:202). Jest on tak(cid:285)e obiektem QObject i korzysta z rozwi(cid:200)zania przypominaj(cid:200)cego interfejs w(cid:239)a(cid:258)ciwo(cid:258)ci QObject: setValue() ustawia warto(cid:258)(cid:202) value, a value() j(cid:200) zwraca. Za jego pomoc(cid:200) mo(cid:285)na sk(cid:239)adowa(cid:202) dowolne dane, które maj(cid:200) by(cid:202) pami(cid:218)tane pomi(cid:218)dzy uruchomieniami aplikacji. Obiekt QSettings wymaga podania nazwy organizacji i nazwy aplikacji, ale jest w stanie w konstruktorze domy(cid:258)lnym pobra(cid:202) te dane od aplikacji. Ka(cid:285)da kombinacja nazw defi- niuje unikatow(cid:200) trwa(cid:239)(cid:200) map(cid:218), która nie wchodzi w konflikt z ustawieniami aplikacji Qt o innych nazwach. Wzorzec Monostate Klasa, która pozwala wielu instancjom na wspó(cid:239)dzielenie tego samego stanu, jest implementacj(cid:200) wzorca Monostate (pojedynczy stan). Dwie instancje QSettings o tej samej nazwie organizacji i aplikacji mog(cid:200) odwo(cid:239)ywa(cid:202) si(cid:218) do tych samych trwa(cid:239)ych danych. W ten sposób aplikacje mog(cid:200) (cid:239)atwo uzyskiwa(cid:202) dost(cid:218)p do wspólnych ustawie(cid:241) z ró(cid:285)nych plików (cid:283)ród(cid:239)owych. Klasa QSettings implementuje wzorzec Monostate. W(cid:239)a(cid:258)ciwy mechanizm trwa(cid:239)ego przechowywania danych QSettings jest zale(cid:285)ny od imple- mentacji i do(cid:258)(cid:202) elastyczny. Mo(cid:285)liwe jest wykorzystanie rejestru Win32 (w Windows) i kata- logu $HOME/.settings (w Linuksie).Wi(cid:218)cej informacji znajdziesz w dokumentacji API klasy QSettings. Funkcja QMainWindow::saveState() (zapisz stan) zwraca tablic(cid:218) QByteArray zawieraj(cid:200)c(cid:200) informacje o paskach narz(cid:218)dzi i wid(cid:285)etach pod(cid:239)(cid:200)czonych do g(cid:239)ównego okna. Wykorzystana jest do tego w(cid:239)a(cid:258)ciwo(cid:258)(cid:202) objectName ka(cid:285)dego z podwid(cid:285)etów, dlatego istotne jest, by nazwy te by(cid:239)y unikatowe. Funkcja saveState() ma opcjonalny parametr int versionNumber. Obiekt QSettings przechowuje tablic(cid:218) QByteArray pod kluczem state . Poleć książkęKup książkę 10.3. QSettings: konfiguracja aplikacji 313 Funkcja QMainWindow::restoreState() (przywró(cid:202) stan) pobiera QByteArray, prawdopo- dobnie utworzon(cid:200) przez saveState(), i w oparciu o zapisane w niej informacje odpowied- nio rozmieszcza paski narz(cid:218)dzi i pod(cid:239)(cid:200)czone wid(cid:285)ety. Ona równie(cid:285) ma opcjonalny parametr versionNumber. Odczytaj ustawienia po skonstruowaniu obiektu, jak w przyk(cid:239)adzie 10.8. PRZYK(cid:146)AD 10.8. src/widgets/mainwindow/mymainwindow.cpp [...] void MyMainWindow::readSettings() { QSettings settings; QPoint pos = settings.value( pos , QPoint(200, 200)).toPoint(); QSize size = settings.value( size , QSize(400, 400)).toSize(); QByteArray state = settings.value( state , QByteArray()) .toByteArray(); restoreState(state); resize(size); move(pos); } Ustawienia nale(cid:285)y zapisa(cid:202) po tym, gdy u(cid:285)ytkownik wyrazi ch(cid:218)(cid:202) wyj(cid:258)cia z aplikacji, ale przed zamkni(cid:218)ciem okna. Odpowiednim na to miejscem jest kod obs(cid:239)ugi zdarze(cid:241), gdy(cid:285) mo(cid:285)na tam obs(cid:239)u(cid:285)y(cid:202) zdarzenie, zanim zrobi to sam wid(cid:285)et. Przyk(cid:239)ad 10.9 przedstawia funkcj(cid:218) obs(cid:239)ugi zdarzenia zamkni
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

C++ i Qt. Wprowadzenie do wzorców projektowych. Wydanie II
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: