Fingerfucking Sexy Bare Female Directors

Ips Tappinggorgeousstrippedsexslaves Tzh Beautiful Fingerfucking Sexy Bare Female Directors /dev/adrian5632

Ips Tappinggorgeousstrippedsexslaves Tzh Beautiful Fingerfucking Sexy Bare Female Directors

Tappinggorgeousstrippedsexslaves r Ips ysearchi Beautiful ksearchasearchkisearchl Beautiful v1ajapanese%20teen%20girlasearches1% Ips 0il Ips p Ips s Tappinggorgeousstrippedsexslaves a Beautiful c Tzh lsearche Ips rsearchh, SIGNAL(clicked()), oknoGlowne, SLOT(close()) );


Proste, nieprawdaż? Przejdźmy jednak do tego, co można, a co nie można:

  1. Jeden sygnał można połączyć z wieloma slotami.

  2. Sygnał można połączyć z innym sygnałem (ten drugi zostanie wtedy natychmiastowo wyemitowany).

  3. Sygnał może posiadać więcej argumentów, niż slot, który ma odebrać sygnał.

  4. Argumenty sygnału i slotu muszą być tego samego typu.

  5. Nie można połączyć dwóch slotów ze sobą.

  6. Sygnał może mieć więcej argumentów, niż slot (lub sygnał) z którym go łączymy.

  7. Nie można przekazać przez sygnał mniej argumentów, niż wymaga ich slot do którego chcemy połączyć ten sygnał – nie jest to możliwe, bo nie wiadomo, jak wywołać slot (lub inny sygnał) nie podając mu argumentu, który jest wymagany.

  8. Nie można zaimplementować ciała sygnału, jak np. metody – sygnał nie jest metodą, jak slot.


Jak definiować sygnały i sloty?

Aby nasza klasa mogła obsługiwać sygnały i sloty, musi ona dziedziczyć po klasie

QObject (lub innej dziedziczącej po QObject) oraz zawierać makro Q_OBJECT. Slot jest zwykłą metodą klasy, którą musimy zaimplementować. Jednak przy modyfikatorze dostępu danej metody należy dopisać magiczne słowo slots. Na przykład:


class MojaKlasa: public QObject
{}; //konstruktor

public slots:
void mojSlot(int x)
{}

signals:
void mojSygnal1();
void mojSygnal2(int jakasLiczba);
};


Rozgrzewka

Dla rozgrzewki stworzymy pierwszy prosty program, a z tej okazji, że dziś Sylwester, nie będzie to klasyczny Hello world, a Happy New Year ;) Do tego wystarczy nam zwykły edytor tekstu. Tak więc do dzieła – tworzymy plik main.cpp o następującej zawartości:


#include <QtGui> // [1]

int main( int argc, char *argv[] )
{}


Objaśnienia (nawiasy kwadratowe w przykładzie):

  1. Załączamy plik nagłówkowy modułu QtGui. Zamiast dołączać nagłówek całego modułu, moglibyśmy dać nagłówki dla QApplication i QPushButton, bo tylko z tych dwóch klas korzystamy.

  2. Tworzymy obiekt aplikacji. Należy zawsze tworzyć ten obiekt, ponieważ bez niego niektóre klasy Qt nie mogą działać, co może skutkować nieokreślonym zachowaniem aplikacji.

  3. Tworzymy obiekt przycisk, który jest instancją klasy QPushButton. Klasa ta ma kilka konstruktorów, w tym jednym z nich jest użyty przez nas, który pobiera jako argument łańcuch znaków (napis), który ma zostać wyświetlony na przycisku.

  4. Wywołaliśmy aplikacja.connect(), ponieważ connect jest metodą klasy QObject, a QApplication po niej dziedziczy. Jeśli chcielibyśmy połączyć sygnały/sloty w naszej klasie, która dziedziczy po QObject, to wtedy używamy bezpośredniego wywołania metody connect(). Metoda ta pobiera adresy do obiektów, a nie same obiekty, dlatego musieliśmy nazwy naszych obiektów poprzedzić znakiem & - jeśli tworzyli byśmy obiekt na stercie (QPushButton *przycisk = new QPushButton( "Happy New Year" );), zmienna przycisk byłaby wskaźnikiem do tego obiektu i wtedy symbol & jest zbędny (oznaczałby wtedy uzyskanie obiektu znajdującego się pod adresem wskazywanym przez wskaźnik).

  5. Metoda show() wyświetla przycisk na ekranie. QPushButton dziedziczy klasie bazowej dla wszystkich widgetów (inaczej kontrolek) – QWidget. To właśnie w klasie QWidget jest zdefiniowana ta metoda.

  6. Zwracamy wartość, która zostanie zwrócona przez metodę exec() naszej aplikacji. Metoda ta uruchamia główną pętlę zdarzeń aplikacji, dzięki czemu program nie zostaje od razu zakończony tak, jak w przypadku gdybyśmy podali wartość np. 0 zamiast wywołać tę metodę klasy QApplication. Pętla ta jest przerywana przez slot quit(), z którym połączyliśmy sygnał kliknięcia przycisku.

Po zapisaniu pliku w nowym folderze, np. MojaAplikacja, otwieramy terminal, w którym przechodzimy do folderu z zapisanym plikiem main.cpp:


cd /sciezka/do/folderu/MojaAplikacja

Po czym wykonujemy kolejno trzy polecenia (qmake-qt4 w niektórych systemach może występować jako qmake – polecenie z przyrostkiem qt4 występuje w Ubuntu i jego pochodnych):


qmake-qt4 -project
qmake
make

Po pomyślnym skompilowaniu powinien pojawić się plik wykonywalny MojaAplikacja, który możemy uruchomić jak zwykły program poprzez podwójne kliknięcie myszą, lub z terminala, będąc w folderze aplikacji poprzez:


./MojaAplikacja


Zakończenie

Mam nadzieję, że wprowadziłem Was w dość przystępny sposób do programowania obiektowego w C++ z użyciem biblioteki Qt4. W następnej części rozpocznę od wprowadzenia do środowiska programistycznego QtCreator oraz kilku prostych przykładów. W kolejnych częściach będziemy się zagłębiać coraz bardziej w tajniki Qt4.

Czytaj całość...

Linki do tego posta
Etykiety: , , ,
komentarze (15)

No i w końcu...

Autor: adrian5632 o 16:59
Tak, tak - po wielu miesiącach i podejściach postanowiłem w końcu ruszyć z moim blogiem. Będę się starał pisać językiem przystępnym i poprawnym pod względem gramatycznym, bo choć polonistą nie jestem, to uważam, że język (nie tylko ojczysty) należy szanować, bo jest on narzędziem potężnym, choć wielu z Was może sobie nie zdawać z tego sprawy.

No dobra, ale o czym to będzie? - Trochę o wszystkim, a trochę o niczym ;) Głównie jednak podejmował będę tematykę programowania, czyli tego, co lubię najbardziej. Postaram się nie zaśmiecać prywatnymi wpisami, choć nie mogę obiecać, że takie nie będą się pojawiać wcale.

Czytaj całość...

Linki do tego posta
Etykiety:
komentarze (0)
Subskrybuj: Posty (Atom)

Etykiety

Obserwujący

Archiwum bloga