Qt - dialogi Bogdan Kreczmer ZPCiR ICT PWR pokój 307 budynek C3 kreczmer@ict.pwr.wroc.pl Copyright c 2003 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępiony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem
Suwak GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,350,110); QPushButton Przycisk = new QPushButton("Jeden krok", this ); setgeometry(10,60,130,30); QLCDNumber Wyswietlacz = new QLCDNumber(this ); Wyswietlacz- move(230,16); Wyswietlacz- setsegmentstyle(qlcdnumber::filled); QSlider Suwak = new QSlider(10, 100, 10, 0, Horizontal, this ); Suwak- setgeometry(10,15,130,20); Suwak- settickmarks(qslider::below); connect(suwak,signal(slidermoved(int)),wyswietlacz,slot(display(int))); connect(suwak,signal(valuechanged(int)),wyswietlacz,slot(display(int))); connect(przycisk,signal(clicked()),suwak,slot(addstep()));
Okno numeryczne GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,350,110); QPushButton Przycisk = new QPushButton("Jeden krok", this ); setgeometry(10,60,130,30); QLCDNumber Wyswietlacz = new QLCDNumber(this ); Wyswietlacz- move(230,16); Wyswietlacz- setsegmentstyle(qlcdnumber::filled); QSpinBox OknoNumeryczne = new QSpinBox(0, 100, 5, this ); OknoNumeryczne- setgeometry(10,15,100,30); OknoNumeryczne- setsuffix( " mm" ); OknoNumeryczne- setspecialvaluetext( "Auto" ); connect(oknonumeryczne,signal(valuechanged(int)),wyswietlacz,slot(display(int))); connect(przycisk,signal(clicked()),oknonumeryczne,slot(stepup()));
Wizualizacja zaawansowania GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,220,90); QPushButton Przycisk = new QPushButton("Kasuj", this ); setgeometry(40,70,130,20); QSlider Suwak = new QSlider(10, 100, 10, 0, Horizontal, this ); Suwak- setgeometry(10,45,190,20); Suwak- settickmarks(qslider::above); QProgressBar Progres = new QProgressBar(100, this ); Progres- setgeometry(10,15,190,20); connect(suwak,signal(valuechanged(int)),progres,slot(setprogress(int))); connect(przycisk,signal(clicked()),progres,slot(reset()));
Standardowy dialog wyboru pliku program.h class GlowneOkno : public QWidget Q_OBJECT QLabel NazwaPliku; public: GlowneOkno( QWidget rodzic=0, const char nazwa=0 ); public slots : void WybieraniePliku(); ; program.cpp void GlowneOkno::WybieraniePliku() QString Nazwa = QFileDialog::getOpenFileName("./",".h"); NazwaPliku- settext(nazwa.isnull()? "???" : Nazwa); NazwaPliku- adjustsize(); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,340,80); NazwaPliku = new QLabel(this ); NazwaPliku- setgeometry(40,15,100,30); QPushButton Przycisk = new QPushButton("Wybierz plik", this ); setgeometry(30,35,130,30); connect(przycisk,signal(clicked()),(glowneokno )this,slot(wybieraniepliku()));
Standardowy dialog wyboru czcionki void GlowneOkno::WybieranieCzcionki() bool ok; QString Prefix; QFont Czcionka = QFontDialog::getFont(&ok,ProbkaTekstu- font()); if (ok) Prefix = "Nowa: "; ProbkaTekstu- setfont(czcionka); else Prefix = "Dotychczasowa: "; ProbkaTekstu- setfont(czcionka); QString Napis; QTextOStream(&Napis) Prefix "Przyklad tekstu (" Czcionka.family() " " Czcionka.pointSize() ")"; ProbkaTekstu- settext(napis); ProbkaTekstu- adjustsize(); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,340,80); ProbkaTekstu = new QLabel("Przykladowy tekst",this ); ProbkaTekstu- setgeometry(40,15,100,30); ProbkaTekstu- adjustsize(); QPushButton Przycisk = new QPushButton("Wybierz czcionkę", this ); setgeometry(50,45,160,30); connect(przycisk,signal(clicked()),this,slot(wybieranieczcionki()));
Standardowy dialog wyboru koloru void GlowneOkno::WybieranieKoloru() QColor Kolor = QColorDialog::getColor(backgroundColor()); if (Kolor.isValid()) setbackgroundcolor(kolor); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,340,80); QLabel ProbkaTekstu = new QLabel(" Tutuj jest wciaż to samo tło. ",this ); ProbkaTekstu- adjustsize(); ProbkaTekstu- move(40,15); QPushButton Przycisk = new QPushButton("Wybierz kolor", this ); setgeometry(50,45,160,30); connect(przycisk,signal(clicked()),this,slot(wybieraniekoloru()));
Stand. dialog poziomu zaawasnowania (tryb modalny) void GlowneOkno::RozpocznijOperacje() QProgressDialog DlgZaaw(" Coś się zaczęło dziać... ", "Przerwij",100,this,0,TRUE); _ProbkaTekstu- settext(" Zaczęło się!!! "); DlgZaaw.setProgress(0); for (int i = 1; i = 100; i++) qapp- processevents(); usleep(100000); // Tu właśnie coś się dzieje... if ( DlgZaaw.wasCancelled() ) break ; DlgZaaw.setProgress(i); _ProbkaTekstu- settext(" Już się skończyło!!! "); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ) setgeometry(100,100,340,80); _ProbkaTekstu = new QLabel(" Teraz nie dzieje się nic. ",this ); _ProbkaTekstu- adjustsize(); _ProbkaTekstu- move(40,15); QPushButton Przycisk = new QPushButton("Rozpocznij", this ); setgeometry(50,45,160,30); connect(przycisk,signal(clicked()),this,slot(rozpocznijoperacje()));
Stand. dialog poziomu zaawasnowania (tryb niemodalny) void GlowneOkno::RozpocznijOperacje() _wdlgzaaw = new QProgressDialog(" Coś się zaczęło dziać... ", "Przerwij",100,this,0,FALSE); _wdlgzaaw- setcaption("tryb niemodalny"); connect( _wdlgzaaw, SIGNAL(cancelled()), this, SLOT(PrzerwijOperacje()) ); _ProbkaTekstu- settext(" Zaczęło się!!! "); _Krok = 0; _Stoper.start(100,TRUE); void GlowneOkno::PrzerwijOperacje() disconnect( _wdlgzaaw, SIGNAL(cancelled()), this, SLOT(PrzerwijOperacje()) ); _Stoper.stop(); _ProbkaTekstu- settext(" Zostało przerwane!!! "); if (_wdlgzaaw) delete _wdlgzaaw; _wdlgzaaw = NULL; void GlowneOkno::WykonajKrokOperacji() if ( ++_Krok _wdlgzaaw- totalsteps() ) PrzerwijOperacje(); return ; _wdlgzaaw- setprogress(_krok); _Stoper.start(100,TRUE); GlowneOkno::GlowneOkno( QWidget rodzic=0, const char nazwa=0 ): _wdlgzaaw(null), _Stoper(this )... connect( &_Stoper, SIGNAL(timeout()), this, SLOT(WykonajKrokOperacji()) );
Wielokrotny dialog poziomu zaawasnowania program.h class KlasaOperacji: public QObject Q_OBJECT int _Krok; QProgressDialog _wdlgzaaw; QTimer _Stoper; GlowneOkno _wokno; public: KlasaOperacji(GlowneOkno ); public slots : void PrzerwijOperacje(); void WykonajKrokOperacji(); ; program.cpp void GlowneOkno::RozpocznijOperacje() new KlasaOperacji(this ); _ProbkaTekstu- settext(" Zaczęło się!!! "); void KlasaOperacji::PrzerwijOperacje() disconnect( _wdlgzaaw, SIGNAL(cancelled()), this, SLOT(PrzerwijOperacje()) ); _Stoper.stop(); _wokno- _ProbkaTekstu- settext(" Zostało przerwane!!! "); delete _wdlgzaaw; delete this ; void KlasaOperacji::WykonajKrokOperacji() if ( ++_Krok _wdlgzaaw- totalsteps() ) PrzerwijOperacje(); return ; _wdlgzaaw- setprogress(_krok); _Stoper.start(100,TRUE); KlasaOperacji::KlasaOperacji( GlowneOkno wokno ): _Krok(0), _wdlgzaaw(null), _wokno(wokno), _Stoper(this ) _wdlgzaaw = new QProgressDialog(" Coś się zaczęło dziać... ", "Przerwij",100,this,0,FALSE); _wdlgzaaw- setcaption("tryb niemodalny"); connect( _wdlgzaaw, SIGNAL(cancelled()), this, SLOT(PrzerwijOperacje()) ); connect( &_Stoper, SIGNAL(timeout()), this, SLOT(WykonajKrokOperacji()) ); _Stoper.start(100,TRUE);
program.h Własny dialog modalny class GlowneOkno : public QWidget Q_OBJECT... public slots : void RozpocznijDialog(); ; class DialogModalny: public QDialog Q_OBJECT public: DialogModalny(QWidget ); DialogModalny(); ; program.cpp void GlowneOkno::RozpocznijDialog() DialogModalny Dialog(this ); int wartosc = Dialog.exec(); switch (wartosc) case QDialog::Accepted: _ProbkaTekstu- settext(" Zaakceptowano!!! "); break ; case QDialog::Rejected: _ProbkaTekstu- settext(" Odrzucono!!! "); break ; DialogModalny::DialogModalny( QWidget parent ): QDialog(parent,"dialog",TRUE) setcaption("dialog"); QPushButton Przycisk = new QPushButton("Akceptuj", this ); setgeometry(10,60,130,30); connect(przycisk,signal(clicked()),this,slot(accept())); Przycisk = new QPushButton("Zaniechaj", this ); setgeometry(160,60,130,30); connect(przycisk,signal(clicked()),this,slot(reject()));
program.h Własny dialog niemodalny class DialogNiemodalny: public QDialog Q_OBJECT public: DialogNiemodalny(QWidget ); DialogNiemodalny(); public slots : void accept(); void reject(); ; program.cpp void GlowneOkno::RozpocznijOperacje() (new DialogModalny(this ))- show(); void DialogNiemodalny::accept() ((GlowneOkno ) parent())- _ProbkaTekstu- settext(" Zaakceptowano!!! "); delete this ; void DialogNiemodalny::reject() ((GlowneOkno ) parent())- _ProbkaTekstu- settext(" Odrzucono!!! "); delete this ; DialogNiemodalny::DialogNiemodalny( QWidget parent ): QDialog(parent,"dialog",FALSE) setcaption("dialog"); QPushButton Przycisk = new QPushButton("Akceptuj", this ); setgeometry(10,90,130,30); connect(przycisk,signal(clicked()),this,slot(accept())); Przycisk = new QPushButton("Zaniechaj", this ); setgeometry(160,90,130,30); connect(przycisk,signal(clicked()),this,slot(reject()));
connect(this,signal(applybuttonpressed()),parent,slot(akceptuj())); program.h Własny dialog stronicowany class GlowneOkno : public QWidget Q_OBJECT public: QLabel _ProbkaTekstu; QTabDialog _wdlg; GlowneOkno( QWidget rodzic=0, const char nazwa=0 ); public slots : void RozpocznijDialog(); void Akceptuj(); ; class DialogModalny: public QTabDialog... ; program.cpp void GlowneOkno::RozpocznijOperacje() (_wdlg = new DialogModalny(this ))- show(); void GlowneOkno::Akceptuj() disconnect(_wdlg,signal(applybuttonpressed()),this,slot(akceptuj())); _ProbkaTekstu- settext(" Zaakceptowano!!! "); delete _wdlg; DialogModalny::DialogModalny( QWidget parent ): QTabDialog(parent,"dialog",TRUE) setcaption("dialog Stronicowany"); setgeometry(30,30,300,200); QWidget wstr = new QWidget(this ); wstr- resize(280,270); (new QSlider(10, 100, 10, 0, Horizontal, wstr))- setgeometry(10,70,250,40); inserttab(wstr,"strona 1"); (wstr = new QWidget(this ))- resize(280,270); (new QSpinBox(0, 100, 5, wstr))- setgeometry(10,15,100,30); inserttab(wstr,"strona 2"); setokbutton("akceptuj"); setapplybutton("zastosuj"); setcancelbutton("zaniechaj");
Okna dialogu stronicowanego