Difference between revisions of "Development/Tutorials/KIO Slaves/Using KIO Slaves in your Program"

Jump to: navigation, search
(CMakeLists.txt: use cmake syntax highlighting)
(Kompile, link and run it: Kompile->Compile and use bash syntax highlighting)
Line 101: Line 101:
= Kompile, link and run it =
= Compile, link and run it =
cmake . && make && ./browser
<syntaxhighlight lang="bash">
cmake . && make && ./browser

Latest revision as of 12:57, 8 July 2011

In this chapter we write a simple browser to show how easy it is to use kioslaves in KDE 4. The browser will download the page www.kde.org and show the html sourcecode. It will not render html - remember this is a programming demo. The purpose of kioslaves is to have access to a given storage or data representation without the need for blocking calls. This is solved via QT's signal/slot mechanism: Once the data has arrived, e.g. from a web page, it triggers a signal. The signal is connected to the respective slot and can start processing the data.


[edit] The files

[edit] main.cpp

#include <QString>
#include <kapplication.h>
#include <kaboutdata.h>
#include <klocalizedstring.h>
#include <kmessagebox.h>
#include <kcmdlineargs.h>
#include <KMainWindow>
#include <browser.h>
int main (int argc, char *argv[])
  // KAboutData (const QByteArray &appName, const QByteArray &catalogName, const KLocalizedString &programName, const QByteArray &version,
  const QByteArray& ba=QByteArray("test");
  const KLocalizedString name=ki18n("myName");
  KAboutData aboutData( ba, ba, name, ba, name);
  KCmdLineArgs::init( argc, argv, &aboutData );
  KApplication khello;
  Browser *mw = new Browser();

The purpose of main is to create a Browser instance and hold it open while the KDE event loop is running (i.e. the KDE program is ready).

[edit] browser.h

#ifndef KDE4START_H__
#define KDE4START_H__
#include <kmainwindow.h>
#include <kio/scheduler.h>
#include <kurl.h>
#include <kio/jobclasses.h>
class Browser : public QWidget
  public slots:
    void slotButtonClicked();
    void dataIsHere(KIO::Job *,const QByteArray &);

[edit] browser.cpp

#include <kio/scheduler.h>
#include <kurl.h>
#include <kio/jobclasses.h>
#include <kdebug.h>
#include <browser.h>
class TransferJob;
Browser::Browser() : QWidget(NULL)
void Browser::slotButtonClicked()
  kDebug() << "entering function";
  // creating a kioslave
  KIO::TransferJob *job = KIO::get(KUrl("http://www.kde.org"));
  connect (job, SIGNAL(  data(KIO::Job *, const QByteArray & )), this, SLOT(dataIsHere(KIO::Job *,const QByteArray &)));
void Browser::dataIsHere(KIO::Job *,const QByteArray & data )
  kDebug() << "data is here";
  kDebug() << data;

As discussed, the Browser class does not do a busy wait for the data to arrive from the web. Instead, it uses the http kioslave's signal data by connecting it to the slot dataishere. dataIsHere gets the http transmission via its parameter data and just outputs it. That's it - no blocking, no busy wait!

[edit] CMakeLists.txt

PROJECT( browser )
SET(kde4startSources main.cpp browser.cpp )
KDE4_ADD_EXECUTABLE(browser ${kde4startSources} )

[edit] Compile, link and run it

cmake . && make && ./browser

This page was last modified on 8 July 2011, at 12:57. This page has been accessed 11,783 times. Content is available under Creative Commons License SA 3.0 as well as the GNU Free Documentation License 1.2.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V.Legal