KDE TechBase
  • Page
  • Discussion
  • Edit
  • History
KDE TechBase is a Wiki - You can help! Please contribute! Questions?

Development/Tutorials/Programming Tutorial KDE 4/KDirWatch

< Development | Tutorials | Programming Tutorial KDE 4
Warning
noframe
If this is going to be made into a proper tutorial, it should be on the main tutorial page. Not a part of this small tutorial series.


Contents

  • 1 Using KDirWatch
    • 1.1 khello.h
    • 1.2 khello.cpp
    • 1.3 main.cpp
  • 2 CMake
    • 2.1 CMakeLists.txt
    • 2.2 Compile it

[edit] Using KDirWatch

If you want your program to be notified upon file changes, use KDirWatch. Here is an example.

[edit] khello.h

#ifndef _KHELLO_H_
#define _KHELLO_H_
 
#include <kmainwindow.h>
#include <kdirwatch.h>
 
/**
 * @short Application Main Window
 * @author Thorsten Staerk <someone@home.de>
 * @version 0.1
 */
class khello : public KMainWindow
{
    Q_OBJECT
public:
    KDirWatch dw;
    /**
     * Default Constructor
     */
    khello(char* args);
 
public slots:
    void slotdirty();
 
};
 
#endif // _KHELLO_H_

This subclasses KMainWindow.

[edit] khello.cpp

#include "khello.h"
 
#include <qlabel.h>
 
#include <kdebug.h>
#include <kmainwindow.h>
#include <klocale.h>
#include <kmessagebox.h>
 
khello::khello(char* args)
    : KMainWindow()
{
    kdDebug() << "args = " << args << endl;
    dw.addFile(args);
    kdDebug() << "Watching file " << args << endl;
    connect(&dw, SIGNAL(dirty(const QString & ) ),
           SLOT( slotdirty() ) );
}
 
void khello::slotdirty()
{
  kdDebug() << "File has changed" << endl;
}
 
#include "khello.moc"
When instanciated, the class creates a KDirWatcher object and tells it to watch the file passed in by the arguments (
dw.addFile(args)
). The DirWatcher will now emit a SIGNAL dirty each time this file gets modified. This signal is connected to khello's slot slotdirty(). So, every time the file gets modified, slotdirty is called.

[edit] main.cpp

/*
This program is a demo how to react on file changes.
*/
 
#include "khello.h"
#include <kapplication.h>
#include <kaboutdata.h>
#include <kcmdlineargs.h>
#include <kdebug.h>
#include <klocale.h>
 
static const char description[] =
    I18N_NOOP("An ");
 
static const char version[] = "0.1";
 
static KCmdLineOptions options[] =
{
    { "+[URL]", I18N_NOOP( "Document to open" ), 0 },
    KCmdLineLastOption
};
 
int main(int argc, char **argv)
{
    KAboutData about("khello", I18N_NOOP("khello"), version, 
      description, KAboutData::License_GPL, 
      "(C) %{YEAR} Thorsten Staerk", 0, 0, "someone@home.de");
    about.addAuthor( "Thorsten Staerk", 0, "mail@home.org" );
    KCmdLineArgs::init(argc, argv, &about);
    KCmdLineArgs::addCmdLineOptions( options );
    KApplication app;
 
    KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
    kdDebug() << argv[1] << endl;
    khello *mainWin = new khello(argv[1]);
    mainWin->show();
 
    return app.exec();
}

[edit] CMake

The best way to build the program is to use CMake.

[edit] CMakeLists.txt

project (dirwatch)
find_package(KDE4 REQUIRED KIO KDIRWATCH)
include_directories( ${KDE4_INCLUDES} )
set(dirwatch_SRCS
        main.cpp
        khello.cpp
)
kde4_add_executable(dirwatch ${dirwatch_SRCS})
target_link_libraries( dirwatch ${KDE4_KDEUI_LIBS} 
  ${KDE4_KIO_LIBS} )

Note that we added ${KDE4_KIO_LIBS} to the target_link_libraries. If we do not do it, the linker complains about undefined symbols. In the kio-libs, KDirWatch is defined.

[edit] Compile it

To compile, link and run it, use:

cmake . && make && ./dirwatch /var/log/messages

If /var/log/messages changes, the program will notify you about it.

Retrieved from "http://techbase.kde.org/Development/Tutorials/Programming_Tutorial_KDE_4/KDirWatch"

Category: C++

Navigation

  • Home
  • Help
  • Recent changes

Sections

  • Getting started
  • Development
  • Schedules
  • Policies
  • Contribute
  • Projects

Toolbox

  • What links here
  • Related changes
  • Upload file
  • Special pages
  • Printable version
  • Permanent link

Personal tools

  • Log in / create account
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. Qt® and Trolltech® are registered trademarks of Trolltech ASA. Linux® is a registered Trademark of Linus Torvalds. | Legal