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