Development/Tutorials/KDE2/KHello/Tutorial 3

From KDE TechBase
< Development‎ | Tutorials‎ | KDE2‎ | KHello
Revision as of 20:29, 29 June 2011 by Neverendingo (talk | contribs) (Text replace - "<code cppqt>" to "<syntaxhighlight lang="cpp-qt">")
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Description

Now is the time to add a few buttons.

Source code

The old code is gray. I have not included main.cc below, because it is the same as in KHello #2. /************* khello.h *******************/

  1. include <kapp.h> // From KHello2
  2. include <kmainwindow.h> // From KHello2
  3. include <qpushbutton.h>

class KHello : public KMainWindow // From KHello2 { // |

 Q_OBJECT                        //  |

public: // From KHello2

 KHello();
 void closeEvent(QCloseEvent *); // From KHello2

public slots:

 void slotHello();
 void slotExit();

private:

 QPushButton *btnHello;
 QPushButton *btnExit;

}; /************* khello.cc ******************/

  1. include "khello.moc" // From KHello2
  2. include <kmessagebox.h>

KHello::KHello() : KMainWindow() {

 btnHello = new QPushButton("Hello", this);
 btnHello->setGeometry(45,30,50,25);
 btnHello->show();
 connect(btnHello, SIGNAL(clicked()), this, SLOT(slotHello()));
 
 btnExit = new QPushButton("Exit", this);
 btnExit->setGeometry(105,30,50,25);
 btnExit->show();
 connect(btnExit, SIGNAL(clicked()), this, SLOT(slotExit()));  

}

void KHello::closeEvent(QCloseEvent *e) // From KHello2 { // |

 kapp->beep();                         //  |
 KMainWindow::closeEvent(e);           //  |

} // From KHello2

void KHello::slotHello() {

 KMessageBox::messageBox(0, KMessageBox::Information, "Hello World!");

}

void KHello::slotExit() {

 close();

}

Explaining the code

I'll only explain what I believe is necessary this time. <syntaxhighlight lang="cpp-qt"> public slots: This section is new, and it used by the meta object compiler. In the QT world, slots are event-handlers and signals are events. Put all your event handlers in this section. <syntaxhighlight lang="cpp-qt"> connect(btnHello, SIGNAL(clicked()), this, SLOT(slotHello())); Connect the event "clicked" from the btnHello object to the event handler "slotHello".

Compiling

[on linux where KDEDIR and QTDIR contain the paths to where KDE and Qt are installed respectively] [FreeBSD 5.x users may omit the -ldl]

g++ -c -I$KDEDIR/include -I$QTDIR/include -fno-rtti main.cc
moc khello.h -o khello.moc
g++ -c -I$KDEDIR/include -I$QTDIR/include -fno-rtti khello.cc
g++ -L$KDEDIR/lib -L$QTDIR/lib -lkdeui -lkdecore -lqt -ldl -o khello main.o khello.o

[if moc is not in your path try $QTDIR/bin/moc]