#include <qapplication.h> #include <qlabel.h> int main(int argc,char **argv) QApplication app(argc,argv); QLabel *label = new Qlabel("Hello Qt!",0); app.setmainwidget(label); label->show(); return app.exec();
QLabel *label = new QLabel("<h1><i>Hello</i><font color=red> Qt!</font></h1>",0); #include <qapplication.h> #include <qpushbutton.h> int main(int argc, char *argv[]) QApplication app(argc,argv); QPushButton *button = new QPushButton("Quit",0); QObject::connect(button,SIGNAL(clicked()),&app,SLOT(quit())); app.setmainwidget(button); button->show(); return app.exec();
#ifndef FORM_H #define FORM_H #include <qwidget.h> #include <qvbox.h> class QHBox; class QSpinBox; class QSlider; class QLineEdit; class Form: public QVBox public: Form(QWidget *parent=0, const char *name=0); private: QHBox *hbox; QSpinBox *spinbox; QSlider *slider; QLineEdit *lineedit; ; #endif A Form osztály implementációja #include <qhbox.h> #include <qspinbox.h> #include <qslider.h> #include <qlineedit.h> #include "form.h"
Form::Form(QWidget *parent, const char *name) :QVBox(parent,name) setmargin(6); setspacing(6); hbox = new QHBox(this); lineedit = new QLineEdit(this); hbox->setmargin(6); hbox->setspacing(6); spinbox = new QSpinBox(hbox); slider = new QSlider(Qt::Horizontal,hbox); slider->setrange(0,10); // intervallum spinbox->setrange(0,10); // intervallum spinbox->setvalue(5); connect(slider,signal(valuechanged(int)),spinbox,slot(setvalue(int))); connect(spinbox,signal(valuechanged(int)),slider,slot(setvalue(int))); #include <qapplication.h> #include "form.h" int main(int argc, char *argv[]) QApplication app(argc,argv); Form *form = new Form; app.setmainwidget(form); form->show(); return app.exec();
#ifndef FORM_H #define FORM_H #include <qwidget.h> #include <qvbox.h> class QHBox; class QSpinBox; class QSlider; class QLineEdit; class Form: public QVBox Q_OBJECT public: Form(QWidget *parent=0, const char *name=0); private: QHBox *hbox; QSpinBox *spinbox; QSlider *slider; QLineEdit *lineedit; QString words[11]; void initwords(); public slots: ; #endif void sayasword(int i);
TEMPLATE = app INCLUDEPATH +=. # Input HEADERS += form.h SOURCES += form.cpp main.cpp
#ifndef FORM_H #define FORM_H #include <qwidget.h> class QSpinBox; class QSlider; class QLineEdit; class Form: public QWidget Q_OBJECT public: Form(QWidget *parent=0, const char *name=0);
private: public slots: ; #endif QSpinBox *spinbox; QSlider *slider; QLineEdit *lineedit; QString words[11]; void initwords(); void sayasword(int i); void slottextchanged ( const QString & ); #include <qlayout.h> #include <qspinbox.h> #include <qslider.h> #include <qlineedit.h> #include "form.h" Form::Form(QWidget *parent, const char *name):qwidget(parent,name) spinbox = new QSpinBox(this); slider = new QSlider(Qt::Horizontal,this); slider->setrange(0,10); spinbox->setrange(0,10); lineedit = new QLineEdit(this); QHBoxLayout *toplayout = new QHBoxLayout; //nincs szülje toplayout->addwidget(spinbox); toplayout->addwidget(slider); QVBoxLayout *mainlayout = new QVBoxLayout(this); mainlayout->addlayout(toplayout); mainlayout->addwidget(lineedit); mainlayout->setmargin(11); mainlayout->setspacing(6); connect(slider,signal(valuechanged(int)),spinbox,slot(setvalue(int))); connect(spinbox,signal(valuechanged(int)),slider,slot(setvalue(int))); connect(slider,signal(valuechanged(int)),this,slot(sayasword(int))); initwords(); spinbox->setvalue(5);
void Form::sayAsWord(int i) lineedit->settext(words[i]); void Form::initWords() words[0] = "null";... words[10] = "ten"; TEMPLATE = app INCLUDEPATH +=. # Input HEADERS += form.h SOURCES += form.cpp main.cpp
Indítsa el a Qt Designert. File/New/C++ project/ok Project file: (Célkönyvtár megkeresése) words.pro OK File/New/Widget/OK name: Form caption: Form File/Save As : form.ui
1. A Shift billentyt lenyomva tartva jelölje ki az spinbox-ot és a slider-t, majdadjakialayout / Lay Out Horizontally parancsot. A két elemet körbefoglaló piros keret jelzi az elemek "összetartozását". A Layout/ Break Layout paranccsal bármikor feloldhatja ezt a kapcsolatot. ( Érdemes megkeresni a parancsok mefeleljét az eszköztárban is.) Most pedig jelölje ki a lineedit szövegdobozt, valamint az el z ekben létrehozott, összetartozó piros keretet és adja ki a Layout/ Lay Out Verically parancsot. 3. Kattintson a teljes ablakra (MillMain), majd adja ki a Layout/Lay Out in Grid parancsot. File/New/C++ Main File(main.cpp)/OK/OK #include <qapplication.h> #include "form.h" int main( int argc, char ** argv ) QApplication a( argc, argv ); Form w; w.show(); a.connect( &a, SIGNAL( lastwindowclosed() ), &a, SLOT( quit() ) ); return a.exec();
Object Explorer/Members/Class Varibles/Private/Dupla kattintás/add Variable: QString words[11] Access: private <variables> <variable access="private">qstring words[11];</variable> </variables> A Project Overview ablakban válassza ki a Form rlapot. Edit/Slots... / New Function Function: initwords() Return type: void Specifier: non virtual Access: private Type: function <functions> <function access="private" specifier="non virtual">initwords()</function> </functions> void Form::initWords() words[0] = "null";... words[10] = "ten"; A Project Overview ablakban válassza ki a Form rlapot. Edit/Slots... / New Function Function: init() Return type: void Specifier: virtual Access: protected Type: function
void Form::init() spinbox->setmaxvalue(10); //Beállítható a QtDesigner-ben is slider->setmaxvalue(10); //Beállítható a QtDesigner-ben is initwords(); spinbox->setvalue(5); Edit/Connections/New Sender: slider Signal: valuechanged(int) Receiver: spinbox Slot: setvalue(int) Edit/Connections/New Sender: spinbox Signal: valuechanged(int) Receiver: slider Slot: setvalue(int) A Project Overview ablakban válassza ki a Form rlapot. Edit/Slots... / New Function Function: sayasword(int) Return type: void Specifier: virtual Access: public Type: slot void Form::sayAsWord( int i) lineedit->settext(words[i]); TEMPLATE = app INCLUDEPATH +=. # Input HEADERS += form.ui.h INTERFACES += form.ui SOURCES += main.cpp
Indítsa el a Qt Designert. File/New/C++ project/ok Project file: (Célkönyvtár megkeresése) mill.pro OK
File/New/Widget/OK name: MillMain (ez a párbeszédablak elem azonosítója) caption: Legyen Ön is milliomos (a párbeszédablak cimkéje) File/Save As : millmain.ui (elfogadjuk a párbeszédablak felajánlott nevet) nevébl származtatott 1. A Qt eszköztárából válassza ki a TextEdit eszközt, majd kattintson a MillMain ablakon a szövegdoboz tervezett helyének a környékére. (Az elemek percíz elrendezésével nem kell tördnünk, mert a legvégén a kattintgatásos Layout technika segítségével majd szépen elrendezzük az elemeket. ) 2. A Properties ablakban a Name mez értéke legyen: text (Common Widgets) PushButton eszközgomb, majd kattintás a a gomb várható helyére. Properties: name: endbutton pixmap: (elérési út) home.png (vagy akármilyen más kép) (Display) LCD number eszközgomb Properties: name: moneyvalue numdigits: 9 minimumsize: height - 40, fontsize: size - 28 Megjegyzés: Ha azt szeretnénk, hogy az LCD kijelznk ne legyen aránytalanul nagy, akkor az endbutton és az LCD kijelz közé elhelyezhetünk egy "rugót, távtartót" (spacer) is. 1. A Shift billentyt lenyomva tartva jelölje ki az endbutton-t, a spacer-t és a moneyvalue elemeket, majd adja ki a Layout / Lay Out Vertically parancsot. 2. Most pedig jelölje ki a text szövegdobozt, valamint az el z ekben létrehozott, összetartozó piros keretet és adja ki a Layout/ Lay Out Horizontally parancsot. (Common Widgets) Text Label eszközgomb, majd kattintás a text szövegdoboz alá. Properties: name: questionlabel text: (üres) halign: AlignHCenter valign: AlignVCenter frameshape: Box frameshadow: Sunken
Properties: name: ansgroup title: Kattintson a megfelel válaszra! Properties: 1. válasz name: ans1 text: Els válasz 2. válasz 3. válasz 4. válasz name: ans2 text: Második válaz name: ans3 text: Harmadik válasz name: ans4 text: Negyedik válasz 1. A Shift billentyt lenyomva tartva válasszuk ki rendre a négy Radio Button elemet, majd adjuk ki a Layout/Lay Out in Grid parancsot (van ilyen gomb is az eszközök között). 2. Kattintsunk a válaszokat tartalmazó keretre, majd ismét adjuk ki a Layout/Lay Out in Grid parancsot. Megjegyzés: Ügyeljen arra, hogy a GroupButton-ban a rádió gombok sorrendje megegyezzen az itt megadott sorrenddel. (A Qt Designerben, az Object Explorer/Members ablakban ilyen sorrendben legyenek a gombok.) PushButton eszköz kiválasztása, majd kattintás a válasz blokk alá. Properties: name: nextbutton text: Következ Helyezzünk el egy vízszintes távtartót (spacer) a Következ gomb elé. Kattintson a párbeszédablakra (csak a formra, ne valamelyik elemére), majd adja ki a Layout / Lay Out Vertically parancsot, azaz rendezze a párbeszédablak elemeit vertikálisan. A Ctrl+T billentyk leütésével tesztelheti a párbeszédablak "küllemét". Figyelje meg mi történik az ablak átméretezésekor. A párbeszédablak "Bezárás" gombjával fejezheti be a tesztelést. Szükség esetén bármikor törölhet egy-egy elrendezést (Layout/ Break Layout) és új elrendezést alakíthat ki.
Ha elégedett a végeredménnyel, akkor mentse el a grafikus felület definícióját tartalmazó millmainbase.ui (ui: user interface) fájlt. File/New/C++ Main File(main.cpp)/OK/OK #include <qapplication.h> #include "millmain.h" int main( int argc, char ** argv ) QApplication a( argc, argv ); MillMain w; w.show(); a.connect( &a, SIGNAL( lastwindowclosed() ), &a, SLOT( quit() ) ); return a.exec();
A Project Overview ablakban válassza ki a Form rlapot. Edit/Slots... / New Function Function: nextquestion() Return type: void Specifier: virtual Access: public Type: slot void MillMain::nextQuestion( ) qwarning( tr("millmain::nextquestion(): Not implemented yet" )); Edit/Connections/New a szignál küldje (Sender): nextbutton a szignál fajtája (Signal) : clicked() a szignál fogadására bejelentkez objektum (Receiver) : MillMain a szignált kezel metódus (Slot) : nextquestion() connect( nextbutton, SIGNAL( clicked() ), this, SLOT( nextquestion() ) ); Edit/Connections/New Sender: ansgroup Signal: clicked(int) Receiver: MillMain Slot: checkanswer(int)
Sender: endbutton Signal: clicked() Receiver: MillMain Slot: endgame() // signals and slots connections connect( nextbutton, SIGNAL( clicked() ), this, SLOT( newquestion() ) ); connect( ansgroup, SIGNAL( clicked(int) ), this, SLOT( checkanswer(int) ) ); connect( endbutton, SIGNAL( clicked() ), this, SLOT( endgame() ) ); <connection> itt van a kapcsolatot leíró információ </connection>