• Keine Ergebnisse gefunden

'LHYRUOLHJHQGH(LQIKUXQJHQWVWDQGXQWHU 9HUZHQGXQJGHU47(LQIKUXQJYRQ

N/A
N/A
Protected

Academic year: 2021

Aktie "'LHYRUOLHJHQGH(LQIKUXQJHQWVWDQGXQWHU 9HUZHQGXQJGHU47(LQIKUXQJYRQ"

Copied!
44
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

.OHLQHU(LQEOLFNLQ47

'LHYRUOLHJHQGH(LQIKUXQJHQWVWDQGXQWHU 9HUZHQGXQJGHU47(LQIKUXQJYRQ

http://ni.cs.tu-berlin.de/lehre/C-Praktikum

(wir danken den Berlinern!!)

(2)

:DVLVW47"

*8, %LEOLRWKHNIU&

& .ODVVHQ]XU,PSOHPHQWLHUXQJ YRQ%XWWRQV %R[HVXQG DQGHUHQ JUDILVFKHQ*HVWDOWXQJVHOHPHQWHQÅ:LGJHWV´

YRUKHUGLUHNWH3URJUDPPLHUXQJYRQ81,;;Q|WLJ 47ELHWHW HLQIDFKH0|JOLFKNHLWHQ

]XU(UVWHOOXQJYRQ)HQVWHU2EMHNWHQGHV *8,

]XP=HLFKQHQYRQ3XQNWHQ/LQLHQDXFKNRPSOH[HQ)LJXUHQ 'DUVWHOOXQJYRQ*UDILNHQ

H[LVWLHUW IU81,; /LQX[ XQG:LQGRZV[17N

VHLWYRQGHUQRUZHJLVFKHQ)LUPD Å7UROOWHFK´

www.trolltech.com HQWZLFNHOWXQGHUZHLWHUW

DNWXHOOH9HUVLRQ8QL8OP

(3)

5HIHUHQ]'RNXPHQWDWLRQ

'LH5HIHUHQ]'RNXPHQWDWLRQYRQ4W EHILQGHWVLFK RQOLQHXQWHU http://doc.trolltech.com

XQGDXIGHU&339RUOHVXQJVSDJH

8QWHU Å7XWRULDO´ ILQGHQVLFKJXWHUNOlUWHNOHLQH

3URJUDPPEHLVSLHOHGLHLQ6FKULWWHQ]XHLQHPHLQIDFKHQ 6SLHOHUZHLWHUWZHUGHQ

,QGHUÅ$QQRWDWHG &ODVV /LVW´ EHNRPPWPDQ .XU]EHVFKUHLEXQJHQGHUHLQ]HOQHQ.ODVVHQ

8QWHUGHQ3XQNWHQ Å2YHUYLHZ´ ILQGHQVLFK*UXQGOHJHQGH OHVHQVZHUWH,QIRUPDWLRQHQ]XYLHOHQ7KHPHQ8QWHU

$QGHUHP

4W2EMHFW0RGHOO6LJQDO6ORW0HFKDQLVPXV

0HWD2EMHFW&RPSLOHU XQGYLHOHVDQGHUH

(4)

hEHUVLFKWEHUGLH.ODVVHQKLHUDUFKLH

(5)

4W 3URJUDPPHFRPSLOLHUHQ

(LQIDFKH4W 3URJUDPPHRKQHVHOEVGHILQLHUWH 6LJQDOV6ORWV

export QTDIR=/usr/local/qt-2.3.1

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib

FRPSLOLHUHQ

g++ -c -Wall -I$QTDIR/include -o myprog.o myprog.cc

OLQNHQ

g++ -L$QTDIR/lib -lqt -o myprog myprog.o

IDOOV EHQXW]HUGHILQLHUWH6LJQDOH6ORWV YHUZHQGHWZHUGHQ

GDQQPX‰ GLH.ODVVHQGHILQLWLRQHU]HXJW ZHUGHQPLWGHP 0HWD 2EMHFW&RPSLOHU moc

:HLWHUH.RPSLODWLRQV XQG/LQN6FKULWWHHUIROJHQGDQQPLW g++

(6)

%DVLVNODVVH QObject

QObject LVWGLH

%DVLVNODVVH IDVW

DOOHU 4W 2EMHNWH

(7)

™ .RQVWUXNWRU HUKlOW]ZHL3DUDPHWHU

QOject(QObject *parent=NULL,const char *name=0);

parent LVWGHU9DWHUNQRWHQLQGHULQWHUQHQEDXPDUWLJHQ +LHUDUFKLH

LP9DWHUNQRWHQLVWGDVQHXHUVWHOOWH2EMHNWQXQDOV.LQG2EMHNWUHJLVWULHUW

const QObjectList* QObject::children () const;

QObject* QObject::parent () const;

parent=NULL ² GDV2EMHNWKDWNHLQHQ9DWHU ⇒ 7RSOHYHO2EMHFW 9DWHUNQRWHQNDQQ

QXULP .RQVWUXNWRU IHVWJHOHJWZHUGHQ VSlWHUQLFKWPHKUYHUlQGHUWZHUGHQ

$OOH ,QVWDQ]HQYRQ QObject VROOWHQPLW new DQJHOHJW ZHUGHQ 3RO\PRUSKLH

%HLP/|VFKHQHLQHU,QVWDQ]YRQ QObject ZHUGHQDOOH.LQGHUPLW

delete JHO|VFKWUHNXUVLYDXFKGHUHQ.LQGHU

'HQ1DPHQGHV2EMHNWVOLHIHUW const char* QObject::name() const

%DVLVNODVVH QObject

(8)

6LJQDO 6ORW 0HFKDQLVPXV

,QWHUDNWLRQGHV%HQXW]HUVPLWGHU*8,HUIROJWEHU6LJQDOV 6ORWV ,QMHGHUYRQ QObject DEJHOHLWHWHQ.ODVVHN|QQHQQHXH

0HWKRGHQDOV6LJQDOH E]Z6ORWV GHILQLHUWZHUGHQ

™ 6LJQDOHVHQGHQ1DFKULFKWHQDXVHLQHP2EMHNWKHUDXV

™ 6ORWVHPSIDQJHQ1DFKULFKWHQ

™ (LQ6LJQDOZLUGPLWHLQHP 6ORW YHUEXQGHQGXUFKGLH VWDWLVFKH 0HWKRGH

bool QObject::connect(QObject *sender , char * signal_n, Qobject *receiver, char * slot_n) const;

6LJQDO6ORW¶VELHWHQKRKH)OH[LELOLWlW

™ -HGH.ODVVHNDQQEHOLHELJH$Q]DKOQHXHU6LJQDOH XQG6ORWVGHILQLHUHQ

™ 9HUVFKLFNWH1DFKULFKWHQN|QQHQ

™ EHOLHELJH$Q]DKOYRQ$UJXPHQWHQHQWKDOWHQ

™ GLHDOOHYRPEHOLHELJHQ7\SVHLQN|QQHQ

(9)

)OH[LELOLWlWYRQ6LJQDOV6ORWVFRQW

™ (LQ 6ORW NDQQ1DFKULFKWHQYRQPHKUHUHQ6LJQDOHQYRQ XQWHUVFKLHGOLFKHQ2EMHNWHQHPSIDQJHQ

™ (LQ6LJQDONDQQPLWPHKUHUHQ6ORWVYHUEXQGHQVHLQ

™ GLHYHUVFKLFNWH1DFKULFKWZLUGDQMHGHQDQJHVFKORVVHQHQ 6ORWJHOHLWHW

™ 'LH$XIUXIUHLKHQIROJHLVWGDEHLQLFKWIHVWJHOHJW

™ %HLP/|VFKHQHLQHV QObject V ZHUGHQLP'HVWUXNWRUDOOH 9HUELQGXQJHQJHO|VFKWGLHYRQVHLQHQ6LJQDOHQDXVJHKHQ RGHUGLH]XVHLQHQ6ORWVIKUHQ

1DFKWHLOH

6LJQDOV 6ORWV EHGUIHQHLQHU]XVlW]OLFKHQ .RPSLODWLRQ PLW

moc

6LJQDOV 6ORWV VLQGHWZDVODQJVDPHUDOVHLQIDFKH

6LJQDO 6ORW 0HFKDQLVPXV

(10)

™ $XIEDXHLQHUYRQ QObject DEJHOHLWHWHQ.ODVVH

6LJQDOVXQG6ORWVZHUGHQLQGHU.ODVVHQGHILQLWLRQZLH QRUPDOH0HWKRGHQ GHNODULHUW

™ 5FNJDEHW\S void EHOLHELJH3DUDPHWHU $Q]DKOXQG7\SHQ

™ GLH=HLOHGHU.ODVVHQGHILQLWLRQPX‰HLQ0DNURDXIUXIHQ

Q_OBJECT RKQHDEVFKOLH‰HQGHV6HPLNRORQ

™ LQGHU'HNODUDWLRQZHUGHQGLHQHXH 6SH]LIL]LHUHU YHUZHQGHW

^ private _ public _ protected `^ signals _ slots `

9RP3URJUDPPLHUHUGHILQLHUWZHUGHQQXU 6ORWV

™ 6ORWVVLQGJHZ|KQOLFKH0HWKRGHQ

™ 6ORWV N|QQHQZLHJHZ|KQOLFKH0HWKRGHQDXIJHUXIHQZHUGHQ

™ &RGHIU6LJQDO0HWKRGHQZLUGYRP moc HU]HXJW

™ GDUIQLFKW YRP3URJUDPPLHUHUJHVFKULHEHQZHUGHQ

6LJQDO 6ORW 0HFKDQLVPXV

(11)

class NewClass : public QObject{

Q_OBJECT

public: // public Methoden, Konstruktoren signals:

void signal1(int,const char*);

public slots:

void slot1(double dvalue,QString &q_str);

private slots:

void slot2();

private: // private Methoden und Attribute };

6LJQDO 6ORW 0HFKDQLVPXV %HLVSLHO

(12)

™ =XP9HUELQGHQYRQ6LJQDOVXQG6ORWV ZLUG

connect() EHQXW]W

bool QObject::connect(QObject* sender , char* signal_n , QObject* receiver , char* slot_n) const;

sender XQG signal VSH]LIL]LHUHQGDVVHQGHQGH2EMHNW XQGVHLQH6LJQDO0HWKRGH

receiver XQG slot VSH]LIL]LHUHQGDVHPSIDQJHQGH2EMHNW XQGVHLQH6ORW0HWKRGH

QPushButton quit( "Quit" ,0 ); // neuer Pushbutton

QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT(quit()) );

'DV(LQKlQJHQ GHU0HWKRGHQJHVFKLHKW GDEHLPLWGHQ 0DNURV 6,*1$/XQG6/27

6LJQDO 6ORW 0HFKDQLVPXV

(13)

™ (LQH9HUELQGXQJNDQQGXUFK disconnect JHO|VWZHUGHQ

bool QObject::disconnect(QObject* sender , char* signal , QObject* receiver , char* slot );

..., RGHUGXUFKDXWRPDWLVFKH$XIO|VXQJEHLP

=HUVW|UHQHLQHVGHUEHLGHQ2EMHNWH

™ 'XUFKGDV0DNUR emit() ZLUGNQVWOLFKHLQ 6LJQDO LP3URJUDPPHU]HXJW

'HU7H[WGXUFKGHQ emit() HUVHW]WZLUGLVWOHHU

emit(mysignal()); -> mysignal();

(VKDQGHOWVLFKDOVROHGLJOLFKXPHLQH0DUNLHUXQJIU GHQ 3URJUDPPLHUHU

6LJQDO 6ORW 0HFKDQLVPXV

(14)

™ :HLWHUH(LJHQVFKDIWHQYRQ6LJQDOHQ XQG 6ORWV

,QHLQHU6ORW0HWKRGHNDQQHUPLWWHOWZHUGHQ YRQ ZHOFKHP 2EMHNWGDVJHVHQGHWH6LJQDONDP const QObject *sender();

:XUGHGHU6ORWQLFKWYRQHLQHP6LJQDODNWLYLHUWLVWGLH5FNJDEH XQGHILQLHUWE]ZVHQGHU 18//

3DUDPHWULVLHUXQJHQ YRQ6LJQDOHQ XQG 6ORWV PXVVEHUHLQVWLPPHQ 6LJQDOV6ORWVN|QQHQEHOLHELJYLHOH3DUDPHWHUYRQEHOLHELJHP7\SKDEHQ hEHUSUIXQJGHU 3DUDPHWULVLHUXQJ HUIROJW]XU/DXI]HLW

)HKOHUPHOGXQJDXI stderr GDV3URJUDPPOlXIWDEHUZHLWHU

default 3DUDPHWHUVLQGIU6LJQDOVXQG6ORWVQLFKWHUODXEW

%ORFNLHUHQYRQ6LJQDOHQ

blockSignals(TRUE) EORFNLHUW

blockSignals(FALSE) KHEWGLH%ORFNLHUXQJZLHGHUDXI

6LJQDO 6ORW 0HFKDQLVPXV

(15)

0HWD2EMHFW &RPSLOHU

=XU1XW]XQJGHV6LJQDO6ORW.RQ]HSWVPX‰PDQHLJHQH.ODVVHQ GHILQLHUHQGLHYRQ QObject DEJHOHLWHWVLQG

$XV GHU'DWHLPLWGHU.ODVVHQGHILQLWLRQPHLVWHLQH +HDGHU'DWHL PX‰PLW+LOIHGHV 0HWD2EMHFW &RPSLOHUV moc HLQH

]XVlW]OLFKH'DWHLHU]HXJWZHUGHQPRFB

*UXQGVlW]OLFKELHWHQVLFK]ZHL:HJHEHLGHU%HQXW]XQJGHV

moc DQ

0HWKRGH

™ 'DVPLWPRFHU]HXJWH3URJUDP GHU .ODVVHQGHILQLWLRQZLUG LQHLQHP HLJHQHQ6FKULWW]XHLQHU2EMHNWGDWHLNRPSLOLHUWPLW g++ XQG HUVW EHLP/LQNHQPLW g++ ]XUDXVIKUEDUHQ'DWHLKLQ]XJHIJW

0HWKRGH

™ 'DVPLWPRFHU]HXJWH3URJUDPP GHU .ODVVHQGHILQLWLRQZLUG PLWWHOV

HLQHU #include $QZHLVXQJLQ GHQ4XHOO&RGHHLQJHIJW

(16)

0HWD 2EMHFW &RPSLOHU %HLVSLHO

// Datei myclass.h

class MyClass:public Qobject { Q_OBJECT

public: // Konstruktor

MyClass(QObject *parent=0, const char *name=0);

// mehr Methoden und Signale };

// Datei myclass.cpp

#include “myclass.h“

#include “moc_myclass.cpp“ // 2.Fall MyClass::MyClass(QObject* parent,

const char* name) : QObject(parent,name){

// Code des Konstruktors }

// mehr Methoden und Slots

™ Kompilationsvorgang nach Methode 1:

thales$ moc myclass.h -o moc_myclass.cpp thales$ g++ moc_myclass.cpp -o moc_myclass.o thales$ g++ myclass.cpp -o myclass.o

thales$ g++ myclass.o moc_myclass.o main.o -o main -L... -l...

™ Kompilationsvorgang nach Methode 2:

thales$ moc myclass.h -o moc_myclass.cpp

Include von moc_myclass.cpp in myclass.cpp statt in myclass.h thales$ g++ myclass.cpp -o myclass.o

thales$ g++ myclass.o main.o -o main -L... -l...

(17)

QWidget

:LGJHWVJUDILVFKH(OHPHQWH ZHUGHQPLW GHU.ODVVH QWidget

HU]HXJWE]ZYRQLKUDEJHOHLWHW

QWidget VHOEVWLVW YRQ QObject DEJHOHLWHW

MHGHV:LGJHWZLUGLQQHUKDOEGHVVHQ9DWHU:LGJHWV GDUJHVWHOOW 3RVLWLRQZLUGUHODWLY]XUOLRE(FNHGHV9DWHU:LGJHWV DQJHJHEHQ :LGJHWV RKQH9DWHUVLQG7RSOHYHO:LGJHWV

QWidget GHILQLHUWHLQLJHDOOJHPHLQJOWLJH0HWKRGHQ V 5HI'RN

™ ]%GDUVWHOOHQ YHUVWHFNHQYRQ :LGJHWV

virtual void show(); virtual void hide();

™ )XQNWLRQDOWlW GHV :LGJHWV VWHXHUQ² HLQ RGHUDXVVFKDOWHQ

virtual void setEnabled(bool);

™ QDFKGHU(U]HXJXQJVLQGDOOH:LGJHWSHU GHIDXOW HQDEOHG HVNDQQ0DXVNOLFNVXQG7DVWDWXUHLQJDEHQHUKDOWHQ

™ 0LW setEnabled(FALSE); NDQQGDV:LGJHW DXVJHVFKDOWHWZHUGHQ

'DV :LGJHW LVWLPPHUQRFKVLFKWEDUMHGRFKJUDXXQWHUOHJW

(18)

QWidget

EHVFKUlQNHQGHUJHRPHWULVFKHQ$EPHVVXQJHQGHV :LGJHWV

virtual void setMinimumSize(int minWid, int minHei );

virtual void setMaximumSize(int maxWid, int maxHei );

void setFixedSize (int width , int height );

VHW]HQGHUDNWXHOOHQ$EPHVVXQJHQ JHRPHWU\XQG3RVLWLRQGHV :LGJHWV

virtual void setGeometry(int x, int y, int w, int h); // Pos&Größe virtual void resize ( int w, int h ); //setzt nur Größe

VHW]HQGHU+LQWHUJUXQGIDUEHGHV :LGJHWV

virtual void setBackgroundColor (const QColor& color);

™ Qcolor LVWHLQH 4WHLJHQH.ODVVHGLH)DUEHQEHVFKUHLEW .RQVWUXNWRU QColor(int r, int g, int b); QDFK5*%

™ %HLVSLHO QColor black(0,0,0); QColor red(255,0,0); HWF

VHW]HQGHU6FKULIWDUW)RQWIUGDV :LGJHW XQGDOOHVHLQH.LQGHU

virtual void setFont(const QFont& font);

™ %HLVSLHO QFont f(“Helvetica“,12,QFont::Bold);setFont(f);

(19)

.ODVVH QApplication

™ 'DV2EMHNWGHU.ODVVH 4DSSOLFDWLRQ

EHUQLPPWGLH.RQWUROOHEHUGLH,QWHUDNWLRQPLWGHP%HQXW]HU ,QQHUKDOEGHV.RQVWUXNWRUVHUOHGLJWGLHVHV2EMHNW

+HUVWHOOXQJHLQHU6RFNHWYHUELQGXQJ]XP;6HUYHUXQWHU8QL[

IDOOVQLFKWHUIROJUHLFK ⇒ 3URJUDPPDEEUXFK

$XVZDKOHLQHU)DUESDOHWWH

$QOHJHQXQG,QLWLDOLVLHUHQLQWHUQHU'DWHQVWUXNWXUHQ ]XU9HUZDOWXQJGHU)HQVWHUDXIGHP%LOGVFKLUP

™ 3URJUDPPHHQWKDOWHQLPPHUQXUHLQ QApplication 2EMHNW

™ 'DV QApplication 2EMHNW

QLPPWDOOH(UHLJQLVVH(YHQWVYRQ7DVWDWXUXQG0DXVHQWJHJHQ YHUWHLOWGLHVHZHLWHUDQHQWVSUHFKHQGH4W2EMHNWH

GRUWZHUGHQGDQQHQWVSUHFKHQGH$NWLRQHQDXVJHIKUW

(20)

.ODVVH QApplication

*UXQGDXIEDXHLQHU4W$SSOLNDWLRQ

// Datei main.cpp

#include <qapplication.h>

int main(int argc,char **argv){

// Erzeugung eines Objekts der Klasse QApplication

QApplication(argc,argv); // soll als erstes im Programm erfolgen // Zugriff argc, argv: int argc() const;

...

// Initialisierung und Anzeige von Fenstern..., // der eigentliche Code!

// Haupt-Event Schleife wird mit app.exec() gestartet und wartet bis // QApplication::exit(int retcode=0) aufgerufen

// oder das Widget "zerstört" wird,

// z.B. mit: app.quit() [slot] ≡≡ QApplication::exit(0) return app.exec();

}

(21)

QPushButton

™ QPushButton HUEWYRQGHUDEVWUDNWHQ.ODVVH QButton GLHYRQ QWidget HUEW

,Q QButton VLQG0HWKRGHQGHILQLHUW GLHDOOHQ%XWWRQ7\SHQJHPHLQVDPVLQG GLHHLQ%XWWRQEHUHLWVWHOOW

QString text() const; QButtonGroup* group() const;

virtual void setText(const QString&);

™ QPushButton VWHOOWHLQHQ$NWLRQVEXWWRQ GDU

™ 9HUELQGXQJHLQHV QPushButton ¶VPLWHLQHP6ORW

GDV6LJQDO]% QPushButton::clicked() ZLUGYHUEXQGHQPLW GHPJHZQVFKWHQ6ORW 0HWKRGHHLQHV2EMHNWV)XQNWLRQ

™ 'DV6LJQDO clicked() ZLUGGDQQJHVHQGHWZHQQ

mousePressEvent mouseReleaseEvent EHUGHP QPushButton

UHJLVWULHUWZXUGHQ 0DXVWDVWHGUFNHQXQGZLHGHUORVODVVHQ

(22)

QPushButton

// Datei qpushbutton1.cpp

#include <qapplication.h> // für Klasse QApplication

#include <qwidget.h> // qwidget.h nicht unbedingt // notwendig, da

#include <qpushbutton.h> // qpushbutton.h inkludiert int main(int argc,char **argv)

{

QApplication app(argc,argv);

QWidget *w=new QWidget();

w->resize(200,100);

w->setCaption(“QPushButton Example“);

QPushButton *pb=new QPushButton(“Exit“,w); // w ist Vater pb->setGeometry(50,25,100,50); // Koord. relativ z.

// ob.-li. Ecke // connect verbindet Signal clicked() mit quit() von app QObject::connect(pb,SIGNAL(clicked()),qApp,SLOT(quit()));

w->show(); // zeigt das Widget; default: not shown app.setMainWidget(w); // w ist Hauptwidget

return app.exec();

}

ein QPushButton

gedrückt:

(23)

QRadioButton

'LHIROJHQGHQ :LGJHWVVLQGDEJHOHLWHWYRQ QWidget

™ QRadioButton V ODVVHQGHQ%HQXW]HUJHQDXHLQH$OWHUQDWLYH DXVHLQHU5HLKHYRQ 0|JOLFKNHXWHQ DXVZlKOHQ

.RQVWUXNWRUHQ

QRadioButton(const QString &text,QWidget *parent);

... ... ...

0HWKRGHQ

bool isChecked() const; ...

virtual void setChecked(bool ch);

... ... ...

... ... ...

6LJQDOH JHHUEWYRQ QButton

void clicked(); ...

void stateChanged(int); ...

(24)

QCheckBox

™ QCheckBox HV ODVVHQGHQ%HQXW]HUHLQ,WHP ÅDQNUHX]HQ´ ELW ,QIRUPDWLRQÅDQDXV´

.RQVWUXNWRUHQ

QCheckBox(QWidget* parent);

QCheckBox(const QString& text, Qwidget* parent);

0HWKRGHQ

bool isChecked() const; void setChecked(bool check);

JHHUEWH0HWKRGHQ

virtual void setText(const QString& text);

virtual void setPixmap(const QPixmap& pixmap);

QString text() const;

JHHUEWH6LJQDOH

void pressed();

void toggled(bool on);

(25)

QLabel

™ 0LW QLabel OlVVW VLFKHLQIDFKHU7H[WEHTXHP GDUVWHOOHQ

.RQVWUXNWRUHQ

QLabel(QWidget *parent,const char* name=0,WFlags f=0);

QLabel(const QString & text,QWidget *parent);

0HWKRGHQ

QString text() const;

virtual void setAlignment(int alignm);

void setIndent(int indentation);

int indent(void) const;

6ORWV

virtual void setText(const QString& text);

virtual void setPixmap(const QPixmap& pixmap);

virtual void setMovie(const QMovie& movie);

void clear(void);

IHQVWHUIODJV

(26)

QListBox

™ QListBox Ol‰WGHQ%HQXW]HUHLQRGHU PHKUHUH ,WHPV DXVHLQHU/LVWHDXVZlKOHQ .RQVWUXNWRUHQ

QListBox(QWidget* parent=0,const char* name=0,WFlags f=0);

0HWKRGHQ

void insertItem(const QString& text, int index=-1);

void insertItem(const QPixmap& pixmap, int index=-1 );

void changeItem(const QString& text, int index);

virtual void setCurrentItem(int index);

int currentItem() const;

QString currentText(void) const;

QString text(int index) const;

void clear(void);

6LJQDOV 6ORWV

void selected(int index);

virtual void clearSelection(void);

void selectAll(bool select);

(27)

ZHLWHUH:LGJHWNODVVHQ

™ QLineEdit XQG QMultiLineEdit VWHOOHQ

(LQJDEHIHOGHU GDU LQGLHGHU %HQXW]HUHLQH RGHUPHKUHUH 7H[W]HLOHQ KLQHLQVFKUHLEHQNDQQ

™ (LQH QComboBox EHQ|WLJWZHQLJHU3ODW]DOV QListBox

KDWDEHUDQVRQVWHQHLQVHKUlKQOLFKHV9HUKDOWHQ

™ QMenuBar XQG QPopupMenu HU]HXJHQ3XOO'RZQ0HQXV

(28)

QMessageBox

QMessageBox VWHOOWHLQH NXU]H%RWVFKDIWGDU

HLQ6WULQJHLQ,FRQELV]X GUHL%XWWRQV

GUHLYHUVFKLHGHQH7\SHQ

,QIRUPDWLRQLQQHUKDOE QRUPDOHQ3URJUDPPDEODXIV :DUQLQJ]XU:DUQXQJGHV

%HQXW]HUVIUXQJHZ|KQOLFKH )HKOHU

&ULWLFDOIUNULWLVFKH)HKOHU

(29)

QMessageBox (2)

(V ZLUGGLH1XPPHUGHV JHGUFNWHQ%XWWRQV

]XUFNJHOLHIHUW

VRNDQQLP switch .RQVWUXNW DXI GLH%HQXW]HUHQWVFKHLGXQJ UHDJLHUWZHUGHQ

%VS

switch(QMessageBox::warning(...)){

case 0: /* try again */;

break;

case 1: /* exit */;

break;

}

(30)

QFileDialog

QFileDialog VWHOOWHLQH 'LDORJ%R[EHUHLWPLWGHU 'DWHLHQ RGHU9HU]HLFKQLVVH DXVJHZlKOW ZHUGHQN|QQHQ

6WDWLVFKH0HWKRGHQ

QString getOpenFileName(...);

QStringList getOpenFileNames( ... );

QString getSaveFileName(...);

%VS

QString s(QFileDialog::getOpenFileName(QString::null,\

“Images (*.jpg)“,this));

if(s.isEmpty()) return;

// your method open()

open(s);

(31)

'HVLJQHU $QTDIR/bin/designer

(LQHYRP'HVLJQHU

HUVWHOOWH'DWHLHQWKlOW GDV8VHU,QWHUIDFH XLLQ;0/)RUPDW

VLHNDQQYLD uic LQ&

&RGHEHUVHW]WZHUGHQ PLW

thales$ $QTDIR/bin/uic

XVHULQWHUIDFHFRPSLOHU

6LHKH0DQXDO]XP

'HVLJQHU

(32)

'HVLJQÅ]X)X‰´/D\RXWPDQDJHU

/D\RXW0DQDJHUZHUGHQEHQ|WLJWXP

8QWHUZLGJHWVLQQHUKDOEHLQHV(OWHUQ:LGJHWV DQ]XRUGQHQ RKQHH[SOL]LWH$QJDEH$XVUHFKQHQ GHUHQ.RRUGLQDWHQ

8QWHUZLGJHWVEHL resizeEvent V DXWRPDWLVFKGHUQHXHQ

*U|‰HGHV(OWHUQ:LGJHWV DQ]XSDVVHQ

RKQHH[SOL]LWH1HXEHUHFKQXQJGHUHQ*U|‰HXQG3RVLWLRQ

(VJLEW]ZHLYHUVFKLHGHQH/D\RXW0DQDJHU

QBoxLayout RUGQHWGLH]XJHRUGQHWHQ:LGJHWV LQ5HLKHDQ LQHLQHU=HLOH² .ODVVH QHBoxLayout +RUL]RQWDO

LQHLQHU6SDOWH² .ODVVH QVBoxLayout 9HUWLNDO

QGridLayout RUGQHWGLH:LGJHWV DXIHLQHP*LWWHUDQ

(33)

/D\RXW0DQDJHU

QLayout LVWGLH

DEVWUDNWH%DVLV

NODVVH GHU /D\RXWV

(34)

/D\RXW0DQDJHU

QLayout VSH]LIL]LHUW GLHJHRPHWULVFKH$QRUGQXQJ GHU :LGJHWV

QBoxLayout KDWIROJHQGH)XQNWLRQDOLWlW

(VEHNRPPWYRP(OWHUQ:LGJHWGHQLKP]XU9HUIJXQJ VWHKHQGHQ3ODW]

WHLOWGLHVHQ3ODW]LQPHKUHUH.lVWFKHQ Å%R[HV´HLQ

-HGHVYRQ QBoxLayout YHUZDOWHWH:LGJHWZLUGLQHLQHÅ%R[´

JHVWHFNW

,VW QBoxLayout ² KRUL]RQWDOGDQQVLQGGLHÅ%R[HV´

QHEHQHLQDQGHU

-HGHV:LGJHWLQVRHLQHU%R[EHNRPPW

PLQGHVWHQVVHLQH QSize QWidget::minimumSize(void);

K|FKVWHQVVHLQH QSize QWidget::maximumSize(void);

'HUEULJEOHLEHQGH3ODW]ZLUGDXIJHWHLOWJHPl‰YRQ VWUHWFK )DNWRUHQ

,VW QBoxLayout ² YHUWLFDO GDQQVLQG GLHÅ%R[HV´

XQWHUHLQDQGHU

(35)

QGridLayout

QGridLayout LVWHLQH YRQ/D\RXW DEJHOHLWHWH.ODVVH

WHLOWGHQ3ODW]LQ=HLOHQXQG6SDOWHQLQ)RUP HLQHU7DEHOOHDXIXQG

SOD]LHUWGLHYHUZDOWHWHQ:LGJHWVLQGHQ HLQ]HOQHQÅER[HV´

QGridLayout *grid = new QGridLayout(messageW, 4, 4);

(36)

QGridLayout

.RQVWUXNWRUHQ

QGridLayout(QLayout* par,int row=1,int col=1,int spc=-1);

QGridLayout(QWidget* par,int row=1,int col=1,int bord=0,int spc=-1);

(UVWH=HLOHLVW row=0 HUVWH6SDOWHLVW col=0

(LQ8QWHU/D\RXWZLUGPLWGHU0HWKRGH

void addLayout(QLayout *layout,int row, int col);

DQGHU3RVLWLRQ row col DXIGHP*LWWHUHLQJHIJW

$QGHUV DOVEHL QBoxLayout LVWGLH5HLKHQIROJH GHV(LQIJHQV

GHU :LGJHWV LQHLQ*LWWHUZHJHQ GHUH[SOL]LWHQ$QJDEHGHU

3RVLWLRQ row col QLFKWZLFKWLJ

(37)

(LQ :LGJHW NDQQLQHLQ*ULGHLQJHIJW ZHUGHQ

LQGLH=HLOH row LQGHU6SDOWH col PLWGHU0HWKRGH

void addWidget(QWidget* w, int row, int col, int alignment=0);

DXFKNRPSOHWWOHHUH=HOOHQ=HLOHQ VLQGHUODXEW

DXFKKLHULVWGLH5HLKHQIROJHGHV (LQIJHQV EHOLHELJ

'LH0LQGHVWPD‰HGHU*LWWHU]HOOHQN|QQHQGHILQLHUWZHUGHQ XP]%$EVWDQG]ZLVFKHQGHQ :LGJHWV ]XVFKDIIHQ

'LH0LQGHVWEUHLWHHLQHU6SDOWHOl‰WVLFKHLQVWHOOHQ 0HWKRGH

addColSpacing(int col, int space);

'LH0LQGHVWK|KHHLQHU=HLOHOl‰WVLFKHLQVWHOOHQ 0HWKRGH

addRowSpacing(int row, int space);

QGridLayout

(38)

0HVVDJH:LQGRZ RKQH/D\RXW

// Datei: message.cpp

#include <qapplication.h>

#include <qwidget.h>

#include <qmultilineedit.h>

#include <qpushbutton.h>

int main(int argc,char **argv){

QApplication app(argc,argv);

QWidget *mW=new QWidget(); mW->resize(220,150);

QMultiLineEdit *messages=new QMultiLineEdit(mW);

messages->setGeometry(10,10,200,100);

messages->append(“Text“);

QPushButton *clear=new QPushButton(“Clear“,mW);

clear->setGeometry(10,120,95,20);

QPushButton *hide=new QPushButton(“Hide“,mW);

hide->setGeometry(115,120,95,20); mW->show();

app.setMainWidget(mW);

return app.exec();

}

UHVL]LQJ

(39)

0HVVDJH:LQGRZ ZLWK%R[/D\RXW

int main(int argc, char **argv){

QApplication app(argc,argv);

QWidget *messageW=new QWidget();

messageW->resize(220,150);

QMultiLineEdit *messages=

new QMultiLineEdit(messageW);

messages->append(“Text“);

QPushButton *clear=new QPushButton(“Clear“,messageW);

QPushButton *hide=new QPushButton((“Hide“,messageW);

QVBoxLayout *topLayout=new QVBoxLayout(messageW,10);

QHBoxLayout *bLayout=new QHBoxLayout();

topLayout->addWidget(messages);

topLayout->addLayout(bLayout);

bLayout->addWidget(clear); bLayout->addWidget(hide);

messageW->show();

app.setMainWidget(messageW);

return app.exec();

}

U H V L]

LQ J

(40)

Layout-Hierarchie

0HVVDJH:LQGRZ ZLWK%R[/D\RXW

QMultiLineEdit::messages

QPushButton::Clear

QPushButton::hide QHBoxLayout::buttonsLayout QVBoxLayout::topLayout

Toplevel-Fenster-Ebene

Layout-Ebene 1

Layout-Ebene 2

Widget-Ebene

L a y o u t s

QWidget::messageW

(41)

0HVVDJH:LQGRZ ZLWK*ULG/D\RXW

int main(int argc, char **argv){

QApplication app(argc,argv);

QWidget *messageW = new QWidget();

messageW->resize(220,150);

QMultiLineEdit *messages = new QMultiLineEdit(messageW);

messages->append("Text");

QPushButton *clear=new QPushButton("Clear",messageW);

QPushButton *hide=new QPushButton("Hide",messageW);

QGridLayout *grid = new QGridLayout(messageW, 2, 2);

grid->addMultiCellWidget( messages, 0,0, 0,1);

grid->addWidget(clear, 1 , 0);

grid->addWidget(hide, 1 , 1);

messageW->show();

app.setMainWidget(messageW);

return app.exec();

}

U H V L]

LQ J

(42)

Layout-Hierarchie

0HVVDJH:LQGRZ ZLWK*ULG/D\RXW

QMultiLineEdit::messages QPushButton::Clear QGridLayout::grid

Toplevel-Fenster-Ebene

Layout-Ebene

Widget-Ebene

L a y o u t s

QWidget::messageW

QPushButton::hide

(43)

%XWWRQ/D\RXWV %HLVSLHO

// Layout-Programmfragment mit 2 Buttons: b1, b2 QHBoxLayout *l=new QHBoxLayout(topW);

l->addWidget(b1); l->addWidget(b2);

QHBoxLayout *l=new QHBoxLayout(topW,0,20);

l->addWidget(b1); l->addWidget(b2);

QHBoxLayout *l=new QHBoxLayout(topW);

l->addWidget(b1); l->addSpacing(20);

l->addWidget(b2);

QHBoxLayout *l=new QHBoxLayout(topW);

l->addWidget(b1); l->addWidget(b2,1);

QHBoxLayout *l =new QHBoxLayout(topW);

l->addStretch(1); l->addWidget(b1);

l->addWidget(b2);

border between children

stretchfactor=1

stretchfactor=0

(44)

%XWWRQ/D\RXWV %HLVSLHO

QHBoxLayout *l =new QHBoxLayout(topW);

l->addWidget(b1);

l->addStretch(1);

l->addWidget(b2);

QHBoxLayout *l =new QHBoxLayout(topW);

l->addWidget(b1,1); //stretchfactor=1 l->addStretch(1);

l->addWidget(b2,1);

QHBoxLayout *l =new QHBoxLayout(topW);

l->addStretch(1);

l->addWidget(b1); l->addWidget(b2);

l->addStretch(1);

QHBoxLayout *l=new QHBoxLayout(topW);

l->addStretch(1); l->addWidget(b1,1);

l->addStretch(1); l->addWidget(b2,1);

l->addStretch(1);

Referenzen

ÄHNLICHE DOKUMENTE

// generates conditional jump instruction for true jump // x represents the condition. void tJump

Finde heraus, ob das Wort mit einem d oder einem t endet. Verl ä ngere es und mache

Die Auswirkungen des Klimawandels auf die zukünftige Schneedeckendauer und -ausdehnung wurde im Rahmen des ACRP-Projekts CC-Snow (CC-Snow, 2013 a, b) exemplarisch für die

Quantenmechanik: jedes Molekül hat diskrete

Karlsruher Institut f¨ ur Technologie Institut f¨ ur Theorie der Kondensierten Materie Ubungen zur Theoretischen Physik F ¨ SS

[r]

6HOEVWDXVO|VHUYHUZHQGHQ 1lKHUH,QIRUPDWLRQHQ HUKDOWHQ6LHDXI6HLWH 1DKDXIQDKPHQPLWGHU 0DNURIXQNWLRQ1lKHUH ,QIRUPDWLRQHQHUKDOWHQ6LH

NXReadType(NXTypedStream *stream, const char *type, void *data) NXWriteType(NXTypedStream * stream, const char *type, const void *data) NXReadTypes(NXTypedStream *stream, const