Development/Tutorials/KDE2/KHello/Tutorial 2

From KDE TechBase
< Development‎ | Tutorials‎ | KDE2‎ | KHello
Revision as of 18:33, 7 January 2007 by Milliams (talk | contribs) (Migrate)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Description

In this step I describe how a window class is created.

Source code

Now there are three files /************* khello.h *******************/

  1. include <kapp.h>
  2. include <kmainwindow.h>

class KHello : public KMainWindow {

 Q_OBJECT

public:

 void closeEvent(QCloseEvent *);

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

  1. include "khello.moc"

void KHello::closeEvent(QCloseEvent *e) {

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

} /************* main.cc ********************/

  1. include "khello.h"

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

 KApplication a( argc, argv, "khello" );
 KHello *w = new KHello();
 w->setGeometry(100,100,200,100);
 a.setMainWidget( w );
 w->show();
 return a.exec();

}

Explaining the code

There are a few commands that need explaining: Q_OBJECT This is a command to the meta object compiler, which is included in the developer files for QT. You must start each KDE class with this line.

void closeEvent(QCloseEvent *); This function is called when your window is being closed. We sound a beep when that happens and then call the original closeEvent() function. The original closeEvent() function takes care to exit the application when the last window gets closed.

  1. include "khello.moc"

The meta object compiler produces a moc file, which you must include. The moc file is an extended version of your header file.

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]