SDJ.Software.Developer-'s.Journal.2011.05.PL.(P2PNet.pl).pdf
(
6384 KB
)
Pobierz
530017774 UNPDF
Spis treści
5/2011 (197)
BIBLIOTEKA MIESIĄCA
4.
Biblioteka Qt: Budowa głównego okna aplikacji w oparciu o klasę QmainWindow
Rafał Kulaga
Niezależnie od przeznaczenia opracowywanej aplikacji, okno główne stanowić będzie zawsze jej wizytówkę. Jest
to bowiem element, którego prawidłowe zaprojektowanie i napisanie ma kluczowe znaczenie dla wygody użyt-
kownika oraz w dużej mierze wpływa na projekt całej aplikacji. W artykule tym Czytelnik będzie miał okazję
zapoznać się z klasami zawartymi w bibliotece Qt, umożliwiającymi tworzenie funkcjonalnych i nowoczesnych
głównych okien aplikacji. Zapraszam do lektury!
WEB DEVELOPMENT
10.
Grafika 3D dla WWW
Adam Wiernasz
U progu ery WEB 3.0 przed światem IT otwierają się nowe możliwości prezentacji informacji. Już niedługo spe-
cyfikacja HTML 5 i webGL jako jej składowa, pozwolą na płynną prezentację gier i wizualizacji 3D w środowisku
przeglądarki. Zanim jednak nowe standardy staną się powszechne w codziennym użytku, możemy postarać się
o stworzenie namiastki tego przy użyciu najpopularniejszej na dzień dzisiejszy technologii Flash.
PROGRAMOWANIE PHP
18.
Test-Driven Development oraz Continous Integration w projektach PHP 5.3
Wojciech Sznapka
Era, gdy PHP służyło do pisania prostych stron WWW i ksiąg gości dawno minęła. Coraz więcej poważnych firm
stosuje PHP w znaczących projektach, a społeczność i firmy rozwijają technologie, dzięki którym PHP zaczyna do-
ganiać swoich dojrzałych rywali, Javę i .NET. W artykule przedstawię kilka porad i dobrych praktyk, jak sprawić
by projekty testowały się same, co zapewni im dobrą jakość.
PROGRAMOWANIE GRAFIKI
24.
Algorytm Lianga-Barsky’ego
Arkadiusz Rataj
Mówiąc o grafice komputerowej, największą dozę emocji dostarczają nam obrazy trójwymiarowe, generowa-
ne przez najnowocześniejsze urządzenia graficzne. Tworzone przez nie projekcje niejednokrotnie wprowadzają
nas w błąd i skłaniają do zastanowienia się, czy oglądany obraz jest rzeczywistym czy wygenerowanym sztucznie?
Nie zdajemy sobie sprawy, że te wszystkie wspaniałości nie istniały by, gdyby nie osiągnięcia w dziedzinie grafiki
dwuwymiarowej. Bowiem za każdym razem, gdy na ekranie ma się pojawić obraz, trzeba rozwiązać jeden pod-
stawowy problem - jak na ekran komputera przenieść obraz znany ze świata rzeczywistego? W artykule przed-
stawiam jedno z możliwych rozwiązań, które wykorzystuje algorytm Lianga-Barsky’ego.
Miesięcznik
Software Developer’s Journal
(12 numerów w roku) jest wydawany przez
Software Press Sp. z o.o. SK
Kierownik produkcji:
Andrzej Kuca
andrzej.kuca@software.com.pl
Redakcja dokłada wszelkich starań, by publikowane
w piśmie i na towarzyszących mu nośnikach
informacje i programy były poprawne, jednakże nie
bierze odpowiedzialności za efekty wykorzystania
ich; nie gwarantuje także poprawnego działania
programów shareware, freeware i public domain.
Wszystkie znaki firmowe zawarte w piśmie są
własności odpowiednich firm.
Zostały użyte wyłącznie w celach informacyjnych.
Prezes:
Paweł Marciniak
Adres korespondencyjny:
Software Press Sp. z o.o. SK,
ul. Bokserska 1, 02-682 Warszawa, Polska
tel. +48 22 427 36 91, fax +48 22 224 24 59
Dyrektor wydawniczy:
Natalia Sieniutowicz
Redaktor naczelny:
Łukasz Łopuszański
lukasz.lopuszanski@software.com.pl
www.sdjournal.org
cooperation@software.com.pl
Osoby zainteresowane współpracą prosimy o kontakt:
cooperation@software.com.pl
Skład i łamanie:
Tomasz Kostro
www.studiopoligraficzne.com
Dział reklamy:
adv@software.com.pl
Spis treści
INŻYNIERIA OPROGRAMOWANIA
30.
Po co nam interfejsy? Tworzenie elastycznego kodu
Michał Bartyzel, Mariusz Sieraczkiewicz
Niektóre wytyczne dotyczące programowania obiektowego traktowane są jako dogmat. Częsty kłopotem do-
gmatu jest stosowanie go w bezrefleksyjny i automatyczny sposób, co prowadzi do całkowitego zagubienia idei,
które ktoś próbował nam przekazać. W artykule zajmiemy się jednym z takich dogmatów, który brzmi: Trzeba
programować poprzez interfejsy. Trzeba? Ale po co?
TESTOWANIE
40.
Problematyka testowania akceptacyjnego aplikacji internetowych oraz
automatyzacji testów w projektach komercyjnych - Robot Framework
Marek Zapłata
Testowanie pełni kluczową rolę w procesie wytwarzania oprogramowania, niezależnie od stosowanej w pro-
jekcie metodyki. Jest to zagadnienie niezwykle szerokie, dlatego w literaturze przedmiotu znaleźć można wiele
definicji testowania oraz procesów i narzędzi wspomagających testowanie.
WYWIAD
46.
Metoda doskonalenia pracy zespołu. Wywiad z Bartoszem Chrabskim
Reklama
BIBLIOTEKA MIESIĄCA
Biblioteka Qt:
Budowa głównego
okna aplikacji w oparciu o klasę
QMainWindow
Niezależnie od przeznaczenia opracowywanej aplikacji, okno główne stanowić
będzie zawsze jej wizytówkę. Jest to bowiem element, którego prawidłowe
zaprojektowanie i napisanie ma kluczowe znaczenie dla wygody użytkownika
oraz w dużej mierze wpływa na projekt całej aplikacji. W artykule tym
Czytelnik będzie miał okazję zapoznać się z klasami zawartymi w bibliotece Qt,
umożliwiającymi tworzenie funkcjonalnych i nowoczesnych okien głównych
z wykorzystaniem klasy QMainWindow. Zapraszam do lektury!
Dowiesz się:
• Jak tworzyć profesjonalne główne okna aplikacji bazu-
jące na klasie QmainWindow,
• Jak biblioteka Qt upraszcza tworzenie złożonych inter-
fejsów poprzez wykorzystanie akcji (klasa QAction),
• Jak korzystać z klas QToolBox, QToolBar, QMenu,
QMenuBar, QStatusBar oraz QDockWidget.
Powinieneś wiedzieć:
• Jak tworzyć widgety oraz okna dialogowe w bibliotece
Qt.
nego interfejsu użytkownika, w przypadku aplikacji two-
rzonych z wykorzystaniem biblioteki Qt, jest zapozna-
nie się z klasami, które wykorzystywane są do budowy
głównego okna aplikacji.
Artykuł ten rozpocznie się opisem struktury główne-
go okna aplikacji, z omówieniem i przykładami zastoso-
wania najważniejszych jego elementów takich jak: pa-
sek menu, paski narzędzi, pasek statusu, okna dokowa-
ne oraz widget centralny. Biblioteka Qt zawiera ponadto
klasę
QAction
, która bardzo upraszcza tworzenie menu
i pasków narzędzi – jej zastosowanie również zostanie
dokładnie opisane. Artykuł zakończony zostanie przypo-
mnieniem podstawowych zasad związanych z mechani-
zmem zarządzania pamięcią w zbiorach obiektów dzie-
dziczących po klasie
QObject
, tym razem z przykładami
dla opisywanych klas.
sy niezbędne do tworzenia złożonych okien
dialogowych:
QDialog
oraz klasy layoutów,
wykorzystywane do grupowania widgetów. Czytelnik
miał ponadto okazję zapoznać się z trzema sposobami
wykorzystania plików opisu interfejsu, tworzonych przy
użyciu programu Qt Designer oraz opisem korzyści,
a także potencjalnych problemów wynikających z zasto-
sowania tego narzędzia w większych projektach.
Większość dostępnych na rynku aplikacji łączy bardzo
wiele podobieństw w budowie interfejsów użytkownika.
W głównym oknie aplikacji prezentowany jest zazwy-
czaj aktualnie otwarty dokument, zaś w oknach dialogo-
wych możemy zmieniać konfigurację bardziej szczegóło-
wych aspektów pracy aplikacji lub wpływać na zawartość
otwartego dokumentu. Rozwiązanie takie powoduje, iż
podstawowa funkcjonalność większości aplikacji może
być przez przeciętnego użytkownika wykorzystywana
bez potrzeby odwoływania się do dokumentacji.
Projektowanie graficznych interfejsów użytkownika
jest dziedziną, w której oryginalność rzadko stanowić
będzie powód do dumny – właśnie ze względu na nawy-
ki użytkowników aplikacji. Jednym z podstawowych kro-
ków do utworzenia wygodnego oraz w pełni funkcjonal-
Struktura głównego okna aplikacji
Projektując oraz implementując główne okno aplikacji,
warto trzymać się sprawdzonych wzorców, określają-
cych rozmieszczenie poszczególnych elementów. Za-
wsze warto również korzystać z widgetów dostosowa-
nych do konkretnego zadania – przykładowo, możliwe
jest tworzenie od podstaw pasków narzędzi zawierają-
cych obiekty klasy
QPushButton
, jednak znacznie lepszym
rozwiązaniem jest zastosowanie obiektów klasy
QAction
,
dodawanych do obiektu klasy
QToolBar
przy użyciu me-
tody
addAction()
.
4
5/2011
W
poprzedniej części cyklu opisane zostały kla-
Budowa głównego okna aplikacji w oparciu o klasę QMainWindow
Z podobną sytuacją mamy do czynienia w przypad-
ku wyboru widgetu, na którym oparte będą okna dialo-
gowe. Oczywiście możliwe jest użycie klasy
QWidget
ja-
ko klasy bazowej i własnoręczna implementacja wszyst-
kich niezbędnych metod, jednak byłoby to rozwiązanie
zdecydowanie nieefektywne. Klasa bardziej rozbudowa-
na, jaką jest
QMainWindow
, również nie najlepiej spraw-
dziłaby się w tym zastosowaniu. Jak jednak wiadomo
z poprzedniej części cyklu, biblioteka Qt zawiera klasę
QDialog
, która nadaje się w tym celu doskonale, ponie-
waż posiada wszystkie niezbędne metody oraz mechani-
zmy, które w razie potrzeby mogą być przez programi-
stę rozszerzane lub modyfikowane poprzez wykorzysta-
nie dziedziczenia.
Wniosek płynący z powyższych rozważań jest oczywi-
sty – aby uzyskać elastyczny i funkcjonalny interfejs użyt-
kownika, którego modyfikacja w kolejnych wersjach nie
będzie dla programisty drogą przez mękę, należy odpo-
wiednio wybierać klasy do realizacji postawionych za-
dań. Na Rysunku 1 przedstawiony został schemat typo-
wego okna głównego aplikacji wraz z wyróżnionymi naj-
ważniejszymi jego elementami, obok których podane zo-
stały nazwy klas biblioteki Qt, które wykorzystać należy
w celu ich praktycznej realizacji.
Zanim jednak przejdziemy do opisu poszczegól-
nych elementów, warto zapoznać się z samą klasą
QMainWindow
, w oparciu o którą buduje się główne okna
aplikacji.
ciu metody
setCentralWidget()
. Przykład jej zasto-
sowania w konstruktorze obiektu dziedziczącego po
QMainWindow
może być następujący:
QGraphicsScene *scene = new QGraphicsScene();
scene->addText("Hello, QMainWindow!", QFont("Times",
18, QFont::Bold));
QGraphicsView *view = new QGraphicsView(scene);
this->setCentralWidget(view);
Klasa
QGraphicsScene
reprezentuje obszar, na którym
umieszczane mogą być elementy graiczne, takie jak
tekst, obrazy oraz widgety. Obiekty tej klasy mogą być
wyświetlane w instancjach klasy
QGraphicsView
. Więcej
informacji na temat tych i innych klas służących do wy-
świetlania graiki dwuwymiarowej zawartych zostanie
w jednej z następnych części cyklu.
Akcje i ich zastosowanie
Klasa
QAction
zapewnia jednolity interfejs umożliwiają-
cy tworzenie akcji interfejsu użytkownika, które mogą
być następnie umieszczane w wielu z elementów głów-
nego okna aplikacji. Każda akcja zawierać może iko-
nę, tekst, opis pomocy kontekstowej, skrót klawiszo-
wy oraz tekst wyświetlany na pasku stanu aplikacji po
jej wybraniu. Właściwości te są ustawiane przez meto-
dy
setIcon()
,
setText()
,
setWhatsThis()
,
setShortcut()
oraz
setStatusTip()
. Dokładny opis tych metod Czytel-
nik znajdzie w dokumentacji biblioteki Qt.
Akcje tworzone są zazwyczaj jako elementy potomne
okna, w którym będą używane. Przed użyciem, muszą
one zostać dodane do odpowiednich widgetów przy po-
mocy metody
addAction()
klasy
QWidget
. W celu połą-
czenia akcji z obsługującymi je slotami należy skorzystać
z generowanego przez nie sygnału
triggered()
, np.:
Klasa QMainWindow
W oparciu o klasę
QMainWindow
buduje się główne
okna aplikacji. Dziedziczy ona bezpośrednio po klasie
QWidget
i nie jest dziedziczona przez żadną klasę nale-
żącą do biblioteki Qt. Główną cechą odróżniającą kla-
sę
QMainWindow
od klasy
QDialog
, jest obsługa mechani-
zmów charakterystycznych dla głównego okna aplikacji
– widgetów dokowanych, pasków narzędzi, menu oraz
statusu.
Struktura głównego okna opartego na klasie
QMainWindow
przedstawiona została na Rysunku 1. Dzie-
dziczenie po niej odbywa się w sposób identyczny, jak
w przypadku klasy
QDialog
, toteż jego opis zostanie
w tym artykule pominięty i zajmiemy się od razu najważ-
niejszymi klasami, wykorzystywanymi w opartych na niej
oknach. Są to:
QObject::connect(deleteAct, SIGNAL(triggered()),
this, SLOT(deleteActHandler));
W powyższym przykładzie zakładamy, że
deleteAct
jest wskaźnikiem na obiekt klasy
QAction
, zaś
deleteActHandler()
jest slotem zdeiniowanym np.
w obiekcie klasy
QMainWindow
.
Tworzenie graficznych interfejsów użytkownika z wy-
korzystaniem pozwala nie tylko na szybkie ustawianie
właściwości takich jak ikona i tekst opisu dla wielu wid-
getów jednocześnie, lecz również ułatwia tworzenie do-
kumentacji kodu. W przypadku zastosowania dużej ilo-
ści sygnałów i slotów niepowiązanych z akcjami, zarzą-
dzanie ich połączeniami staje się wraz z rozwojem apli-
kacji coraz trudniejsze.
•
QMenuBar
– klasa reprezentująca pasek menu;
•
QToolBar
– klasa reprezentująca pasek narzędzi;
•
QStatusBar
– klasa reprezentująca pasek stanu;
•
QDockWidget
– klasa reprezentująca widget dokowany;
•
QToolBox
– klasa reprezentująca zbiór grup narzędzi.
Ponadto instancja klasy
QMainWindow
posiada tzw.
widget centralny (
central widget
), który wyświetlany
jest w głównym obszarze okna, ustawiany przy uży-
Pasek menu – klasa QMenuBar
Pasek menu jest standardowym elementem każdej aplika-
www.sdjournal.org
5
Plik z chomika:
wep_2
Inne pliki z tego folderu:
101 zabezpieczeń przed atakami w sieci komputerowej 2005.pdf
(132961 KB)
3D Studio MAX Matrix - Jak To Zrobic.pdf
(4804 KB)
802.11.pdf
(2829 KB)
8051.pdf
(712 KB)
ABC - Nagrywania płyt CD.doc
(9348 KB)
Inne foldery tego chomika:
● Książki informatyczne
Informatyka
Komputer e-Book
POWTÓRKI
Serwery
Zgłoś jeśli
naruszono regulamin