Utilisation de KXmlGuiWindow

Ce tutoriel introduit la classe KXmlGuiWindow.

Commentez

- Titre : Utilisation de KXmlGuiWindow

- Parution : 5 mai 2011

- Mise à jour : 5 août 2011

- Licence :

Sommaire

- I. Résumé

- II. KxmlGuiWindow

- II-A. mainwindow.h

- II-B. mainwindow.cpp

- III. Retour à main.cpp

- IV. CMake

- V. Remerciements

I - Résumé

Dans le précédent tutoriel, le programme se contentait de créer une boîte de dialogue. On va maintenant chercher à avoir une application fonctionnelle.

II - KxmlGuiWindow

La classe KXmlGuiWindow fournit une fenêtre principale avec des barres de menus, des barres d'outils, une barre de statut et une zone principale au centre pouvant contenir un grand élément graphique. La plupart des applications KDE dérivent de cette classe, car elle permet d'agencer simplement des menus et des barres d'outils au travers de fichiers XML (cette technologie est appelée XMLGUI).

Afin d'obtenir une fenêtre KXmlGuiWindow utile, on doit créer une classe en dérivant. On va donc créer deux fichiers, mainwindow.cpp et mainwindow.h, qui contiendront le code.

II-A - mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <KXmlGuiWindow>
#include <KTextEdit>

class MainWindow : public KXmlGuiWindow
{
public:
MainWindow(QWidget *parent=0);

private:
KTextEdit* textArea;
};

#endif

On commence par hériter de KXmlGuiWindow, puis on déclare le constructeur avec MainWindow(QWidget *parent=0);. Finalement, on déclare un pointeur sur un objet qui constituera le cœur du programme. KTextEdit est un éditeur générique de texte riche ayant quelques raffinements de KDE tels que la dissimulation automatique du curseur.

II-B - mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent)
{
textArea = new KTextEdit();
setCentralWidget(textArea);
setupGUI();
}

Tout d'abord, on inclut évidemment le fichier d'en-tête contenant la déclaration de la classe. Ensuite, on initialise l'éditeur de texte avec un objet. Puis on utilise la fonction setCentralWidget() de la classe KXmlGuiWindow, qui dit à la fenêtre KXmlGuiWindow ce qui doit être affiché dans la zone centrale.

Enfin, KXmlGuiWindow::setupGUI() est appelée, ce qui effectue des tas de choses en coulisse et crée les barres de menus par défaut (Configuration, Aide...).

III - Retour à main.cpp

Afin d'afficher cette fenêtre, on doit ajouter quelques lignes au fichier main.cpp :

main.cpp

#include <KApplication>
#include <KAboutData>
#include <KCmdLineArgs>
#include <KLocale>

#include "mainwindow.h"

int main (int argc, char *argv[])
{
KAboutData aboutData( "tutoriel2", 0,
ki18n("Tutoriel 2"), "1.0",
ki18n("Une simple zone de texte"),
KAboutData::License_GPL,
ki18n("Copyright (c) 2007 Developpeur") );
KCmdLineArgs::init( argc, argv, &aboutData );

KApplication app;

MainWindow* window = new MainWindow();
window->show();

return app.exec();
}

Les seules nouvelles lignes ici (par rapport au premier tutoriel) sont les lignes 6, 19 et 20. À la ligne 19, on crée un objet MainWindow, puis on l'affiche à la ligne 20.

IV - CMake

La manière la plus simple de compiler le programme est d'utiliser CMake. Ce qui change par rapport au tutoriel 1 est que mainwindow.cpp a été ajouté à la liste des fichiers sources et que les occurrences de tutorial1 sont devenues 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})

Pour compiler, faire l'édition de lien et exécuter le programme, on lance :

mkdir build && cd build
cmake ..
make
./tutorial2

V - Remerciements

Merci à Thibaut Cuvelier et à Claude Leloup pour leur relecture !