| Warning |
|---|
| 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 |
If you want your program to be notified upon file changes, use KDirWatch. Here is an example.
#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.
#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"
dw.addFile(args)
/* 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(); }
The best way to build the program is to use CMake.
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.
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.