Dialogi
Transkrypt
Dialogi
Dialogi Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 [email protected] c 2006 Bogdan Kreczmer? Copyright ? Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostepiony ˛ pod warun- kiem wykorzystania wyłacznie ˛ do własnych prywatnych potrzeb i może on być kopiowany wyłacznie ˛ w całości, razem z niniejsza˛ strona˛ tytułowa. ˛ Typy dialogów Dialog niemodalny – po uruchomieniu dialogu wszystkie elementy aplikacji wciaż ˛ odpowiadaja˛ na zdarzenia. Ognisko może zostać przeniesione do dowolnego okienka aplikacji. Tym samym można wybierać inne pozycje menu, narz˛edzia itd. Można również przenieść ognisko do innej aplikacji. Można również przełaczać ˛ sie˛ miedzy ˛ wirutalnymi pulpitami. Dialog modalny – po uruchomieniu dialogu ogniska nie można przenieść do żadnego innego innego okienka danej aplikacji. P˛etla zdarzeń (zwiazanych ˛ z dana˛ aplikacja) ˛ obsługiwana jest tylko w okienku dialogowym. Ognisko można jedynie przenieść do innej aplikajcji. Można również przełaczać ˛ sie˛ miedzy ˛ wirutalnymi pulpitami. Dialogi systemowe – po uruchomieniu dialogu ognisko nie może zostać przeniesione do żadnego innego okienka tej samej, jak też innej aplikacji. Niemożliwe jest przełaczanie ˛ miedzy ˛ wirtualnymi pulpitami. Dialog tego typu zawłaszcza całkowicie wskaźnik ekranowy (mysz) jak też klawiature. ˛ c 2006 Bogdan Kreczmer Copyright Dialogi 1 Przekazywanie informacji z okienka dialogowego • Bezpośredni odczyt z okienka dialogowego utworzonego statycznie (tylko dialogi modalne). • Obsługa komunikacji na poziomie dialogu – obsługa sygnałów z klawiszy dialogowych (tzn. Akceptuj, Odrzuć itp.). Modyfikacja stanu okienka zasadniczego lub innych struktur poprzez wskaźnik (lub referencje) ˛ pamietan ˛ a˛ w okienku dialogowym lub zmiennej globalnej. • Komunikacja poprzez sygnały – gdy informacji jest mało – z poziomu dialogu przesyłana jest pełna informacja o stanie okienka dialogowego do okienka zasadniczego (po przesłaniu sygnału dialog nie musi kończyć swojego działania). – gdy informacji jest dużo – poprzez sygnał przesyłany jest wskaźnik (lub nie, jeśli jest pamietany) ˛ na okienko dialogowe. Z poziomu okienka zasadniczego odczytywany jest aktualny stan okienka dialogowego. Destrukcja okienka dialogowego powinna być realizowana na poziomie okienka zasadniczego. c 2006 Bogdan Kreczmer Copyright Dialogi 2 Przykład dialogu modalnego c 2006 Bogdan Kreczmer Copyright Dialogi 3 Przykład dialogu modalnego Plik: dialogi1.hpp class DialogModalny: public QDialog { // public : DialogModalny( QWidget ∗wRodzic ): QDialog(wRodzic) ... }; // class KlasaKontrolki: public QWidget { // Q OBJECT QPushButton ∗ wPrzycisk; QLineEdit ∗ wOkTekstu; public : KlasaKontrolki( QWidget ∗wRodzic=0L ): QWidget( wRodzic ) ... public slots : void StartujDialog( ) ... }; // c 2006 Bogdan Kreczmer Copyright Dialogi 4 Przykład dialogu modalnego Plik: dialogi1.cpp #include ”dialogi1.hpp” int main( int argc, char ∗∗ argv ) { QApplication Aplikacja( argc, argv ); KlasaKontrolki Kontrolka; Aplikacja.setMainWidget( &Kontrolka ); Kontrolka.show( ); return Aplikacja.exec( ); } c 2006 Bogdan Kreczmer Copyright Dialogi 5 Przykład dialogu modalnego class DialogModalny: public QDialog { // ... }; // class KlasaKontrolki: public QWidget { // ... public : KlasaKontrolki( QWidget ∗wRodzic=0L ): QWidget( wRodzic ) { QVBoxLayout ∗wUkladWer = new QVBoxLayout( this ); wUkladWer–>addWidget( wOkTekstu = new QLineEdit(this ) ); wUkladWer–>addWidget( wPrzycisk = new QPushButton(”Start Dialogu”,this ) ); connect( wPrzycisk, SIGNAL( clicked( ) ), this , SLOT( StartujDialog( ) ) ); } public slots : void StartujDialog( ) ... }; // c 2006 Bogdan Kreczmer Copyright Dialogi 6 Przykład dialogu modalnego class DialogModalny: public QDialog { // ... }; // class KlasaKontrolki: public QWidget { // ... public : KlasaKontrolki( QWidget ∗wRodzic=0L ): QWidget( wRodzic ) ... public slots : void StartujDialog( ) { DialogModalny Dlg(this ); switch ( Dlg.exec( ) ) { case QDialog::Accepted: wOkTekstu–>setText( ”Tak” ); break ; case QDialog::Rejected: wOkTekstu–>setText( ”Nie” ); break ; } } }; // c 2006 Bogdan Kreczmer Copyright Dialogi 7 Przykład dialogu modalnego class DialogModalny: public QDialog { // public : DialogModalny( QWidget ∗wRodzic ): QDialog(wRodzic) { QHBoxLayout ∗wUkladHor = new QHBoxLayout( this ); QPushButton ∗wAkceptuj, ∗wOdrzuc; wUkladHor–>addWidget( wAkceptuj = new QPushButton( ”Akceptuj”, this ) ); wUkladHor–>addWidget( wOdrzuc = new QPushButton( ”Odrzuc”, this ) ); connect( wAkceptuj, SIGNAL( clicked( ) ), this , SLOT( accept( ) ) ); connect( wOdrzuc, SIGNAL( clicked( ) ), this , SLOT( reject( ) ) ); } }; // class KlasaKontrolki: public QWidget { // ... }; // c 2006 Bogdan Kreczmer Copyright Dialogi 8