< Development‎ | Tutorials‎ | KDE2‎ | KHello
Revision as of 20:32, 29 June 2011 by Neverendingo (talk | contribs) (Text replace - "<code cppqt n>" to "<syntaxhighlight lang="cpp-qt" line>")

Development/Tutorials/KDE2/KHello/Tutorial 3


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. <syntaxhighlight lang="cpp-qt" line> /************* 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

 void closeEvent(QCloseEvent *); // From KHello2

public slots:

 void slotHello();
 void slotExit();


 QPushButton *btnHello;
 QPushButton *btnExit;

}; <syntaxhighlight lang="cpp-qt" line> /************* khello.cc ******************/

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

KHello::KHello() : KMainWindow() {

 btnHello = new QPushButton("Hello", this);
 connect(btnHello, SIGNAL(clicked()), this, SLOT(slotHello()));
 btnExit = new QPushButton("Exit", this);
 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() {



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".


[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]

Content is available under Creative Commons License SA 4.0 unless otherwise noted.