Development/Tutorials/Programming Tutorial KDE 4/KDirWatch: Difference between revisions
Line 138: | Line 138: | ||
===main.cpp=== | ===main.cpp=== | ||
<code cppqt> | <code cppqt> | ||
/*************************************************************************** | |||
* Copyright (C) 2004 by Thorsten Staerk | |||
* thorsten at staerk de | |||
* This program is free software; you can redistribute it and/or modify * | |||
* it under the terms of the GNU General Public License as published by * | |||
* the Free Software Foundation; either version 2 of the License, or * | |||
* (at your option) any later version. | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* You should have received a copy of the GNU General Public License * | |||
* along with this program; if not, write to the | |||
* Free Software Foundation, Inc., | |||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
**************************************************************** | |||
This program reacts 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("A KDE KPart Application"); | |||
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, "[email protected]"); | |||
about.addAuthor( "Thorsten Staerk", 0, "[email protected]" ); | |||
KCmdLineArgs::init(argc, argv, &about); | |||
KCmdLineArgs::addCmdLineOptions( options ); | |||
KApplication app; | |||
khello *mainWin = 0; | |||
{ | |||
// no session.. just start up normally | |||
KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); | |||
/// @todo do something with the command line args here | |||
kdDebug() << argv[1] << endl; | |||
mainWin = new khello(argv[1]); | |||
mainWin->show(); | |||
args->clear(); | |||
} | |||
// mainWin has WDestructiveClose flag by default, so it will delete itself. | |||
return app.exec(); | |||
} | } | ||
</code> | </code> | ||
==CMake== | ==CMake== |
Revision as of 22:23, 18 June 2007
Using KDirWatch
If you want your program to be notified upon file changes, use KDirWatch. Here is an example.
khello.h
/***************************************************************************
* Copyright (C) 2004 by Thorsten Staerk
* kde at staerk de
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
******************************************************************
- /
- ifndef _KHELLO_H_
- define _KHELLO_H_
- ifdef HAVE_CONFIG_H
- include <config.h>
- endif
- include <kmainwindow.h>
- include <kdirwatch.h>
/**
* @short Application Main Window
* @author Thorsten Staerk <[email protected]>
* @version 0.1
*/
class khello : public KMainWindow
{
Q_OBJECT
public:
KDirWatch dw;
/**
* Default Constructor
*/
khello(char* args);
/**
* Default Destructor
*/
virtual ~khello();
public slots:
void slotdirty();
};
- endif // _KHELLO_H_
First we Subclass KXmlGuiWindow on line 7 with with class MainWindow : public KXmlGuiWindow.
Then we declare the constructor with MainWindow(QWidget *parent=0);.
And finally we declare a pointer to the object that will make up the bulk of our program. KTextEdit is a generic richtext editor with some KDE niceties like cursor auto-hiding.
khello.cpp
/***************************************************************************
* Copyright (C) 2004-2006 by Thorsten Staerk kde at staerk de
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*******************************************
This program shows us how to set up a kdirwatch, telling us when a file has changed.
This program is a bundle of files and was created with kdevelop.
*/
/*
Working time on this program
2005-01-01 5 h
first tried without the macro Q_OBJECT, this fails (see www.trolltech.com)
2006-12-27 1 h
enabled arguments
*/
- 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() ) );
}
khello::~khello()
{
}
void khello::slotdirty()
{
kdDebug() << "File has changed" << endl;
}
- include "khello.moc"
First, of course, on line 1 we have to include the header file containing the class declaration.
On line 5, we initialise our text editor with an object. Then on line 6 we use the built-in setCentralWidget() function which tells the KXmlGuiWindow what should appear in the central section of the window.
Finally, KXmlGuiWindow::setupGUI() is called which does a lot of behind-the-scenes stuff and creates the default menu bars (Settings, Help).
Back to main.cpp
In order to actually run this window, we need to add a few lines in main.cpp:
main.cpp
/***************************************************************************
* Copyright (C) 2004 by Thorsten Staerk
* thorsten at staerk de
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
****************************************************************
This program reacts 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("A KDE KPart Application");
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, "[email protected]");
about.addAuthor( "Thorsten Staerk", 0, "[email protected]" );
KCmdLineArgs::init(argc, argv, &about);
KCmdLineArgs::addCmdLineOptions( options );
KApplication app;
khello *mainWin = 0;
{
// no session.. just start up normally
KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
/// @todo do something with the command line args here
kdDebug() << argv[1] << endl;
mainWin = new khello(argv[1]);
mainWin->show();
args->clear();
}
// mainWin has WDestructiveClose flag by default, so it will delete itself.
return app.exec();
}
CMake
The best way to build the program is to use CMake. All that's changed since tutorial 1 is that mainwindow.cpp has been added to the sources list and any tutorial1 has become tutorial2.
CMakeLists.txt
project (tutorial2)
find_package(KDE4 REQUIRED)
include_directories( ${KDE4_INCLUDES} )
set(tutorial2_SRCS
main.cpp
mainwindow.cpp
)
kde4_add_executable(tutorial2 ${tutorial2_SRCS})
target_link_libraries( tutorial2 ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} )
Kompile it
To compile, link and run it, use:
cmake . && make && ./tutorial2
Moving On
Now you can move on to using KActions.