Jump to content

Development/Tutorials/Using KXmlGuiWindow (fi) and Development/Tutorials/First program (fi): Difference between pages

From KDE TechBase
(Difference between pages)
Ozzi (talk | contribs)
 
Ozzi (talk | contribs)
 
Line 1: Line 1:
{{Template:I18n/Language Navigation Bar|Development/Tutorials/Using_KXmlGuiWindow}}
{{Template:I18n/Language Navigation Bar|Development/Tutorials/First_program}}
{{TutorialBrowser|
{{TutorialBrowser|


series=Beginner Tutorial|
series=Beginner Tutorial|


name=Main-ikkunan luonti|
name=Perehdytys 1 - Hei Maailma!|


pre=[[Development/Tutorials/First_program (fi)|Tutorial 1 - Hei maailma!]]|
pre=[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html C++], [http://www.trolltech.com/products/qt/ Qt], [[Getting_Started/Build/KDE4|KDE4 development environment]]|


next=[[Development/Tutorials/Using_KActions|Tutorial 3 - KActions and XMLGUI]]|  
next=[[Development/Tutorials/Using_KXmlGuiWindow (fi)|Perehdytys 2 - Main-ikkunan luonti]]|  


reading={{class|KXmlGuiWindow}}
reading=[[Development/Tutorials/CMake (fi)|CMake]]
}}
}}


==Lyhyesti==
==Lyhyesti==
Tämä perehdytys jatkaa [[Development/Tutorials/First_program (fi)|Hei Maailma]]-perehdytyksestä perehdyttäen {{class|KXmlGuiWindow}}-luokan käyttöön Main-ikkunan luomiseksi.
Ensimmäisen ohjelmasi tulisi tervehtiä maailmaa "Hei Maailma!"-viestillä, vai mitä? Tätä tarkoitukseen käytämme {{class|KMessageBox}}-luokkaa, ja muokkaamme yhtä painonappia.
[[image:introtokdetutorial1.png|frame|center]]


Edellisessä perehdytyksessä käytimme ikkunan luomiseksi pop-up-ikkuna tyylistä valintaikkunaa mutta tässä on tarkoitus siirtyä askel lähemmäksi käyttökelpoista ohjelmaa.
{{tip|Konqueror tarjoaa nopean tavan hankkia lisätietoja mistä tahansa KDE:n luokasta. Esimerkiksi, jos haluat lisätietoja KMessageBox - luokasta, kirjoita Konquerorin osoitekenttään "kde:kmessagebox".}}
[[image:introtokdetutorial2.png|frame|center]]


==KXmlGuiWindow==
{{tip|[http://www.kdevelop.org KDevelop] on erinomainen IDE kehitettäessä KDE- ja Qt C++-sovelluksia. Se sisältää integroidun debuggerin, tehokkaan editorin syntaksikorostuksella, ''Projektivelho''n sovellusten luomiseksi mallinneista ja jopa luokkadokumentoinnit. Lisätietoja yksityiskohdista voi myös löytää  [http://kdevelop.org/mediawiki/index.php/Main_Page KDevelop wiki] sivustossa.


{{class|KXmlGuiWindow}} provides a full main window view with menubars, toolbars, a statusbar and a main area in the centre for a large widget. Most KDE applications will derive from this class as it provides an easy way to define menu and toolbar layouts through XML files (this technology is called XMLGUI). While we will not be using XMLGUI in ''this'' tutorial, we will use it in the next.
Ohjeita siitä kuinka käyttää KDevelop-ohjelmaa KDE 4-sovellusten kanssa on saatavilla [[Getting_Started/Set_up_KDE_4_for_development#KDevelop|tällä sivulla]]


In order to have a useful KXmlGuiWindow, we must subclass it. So we create two files, a <tt>mainwindow.cpp</tt> and a <tt>mainwindow.h</tt> which will contain our code.
Silti sinun tarvitsee vielä muokata [[Development/Tutorials/CMake_(fi)|CMake]] tiedostot käsin.
}}


===mainwindow.h===
==Koodi==
<code cppqt n>
Kaikki tarvittava koodi voidaan sijoittaa yhteen tiedostoon. Luo tiedosto <tt>main.cpp</tt> ja kopioi alla oleva koodi siihen:
#ifndef MAINWINDOW_H
<code cppqt>
#define MAINWINDOW_H
#include <KApplication>
#include <KAboutData>
#include <KCmdLineArgs>
#include <KMessageBox>


#include <KXmlGuiWindow>
int main (int argc, char *argv[])
#include <KTextEdit>
 
class MainWindow : public KXmlGuiWindow
{
{
  public:
     KAboutData aboutData("tutorial1",                  // Ohjelman nimi järjestelmän käyttöön.
     MainWindow(QWidget *parent=0);
                        0,                            // Nimi viestiluetteluun, käytä ohjelmannimeä jos nolla.
                        ki18n("Tutorial 1"),          // Näytettävä ohjelman nimi.
   private:
                        "1.0",                        // Ohjelman versionumero. Merkkijono.
    KTextEdit* textArea;
                        ki18n("KMessageBox popup"),   // Lyhyt kuvaus siitä mitä ohjelma tekee.
};
                        KAboutData::License_GPL,      // Lisenssin tunniste
                        ki18n("(c) 2007"),            // Tekijänoikeusmerkintä
                        ki18n("Some text..."),        // Vapaata tekstiä..
                        "http://tutorial.com",        // Ohjelman kotisivu.
                        "[email protected]");       // Sähköpostiosoite bugien raportoimista varten.


#endif
    KCmdLineArgs::init( argc, argv, &aboutData );
    KApplication app;
    KGuiItem guiItem( QString( "Hello" ), QString(),
                      QString( "this is a tooltip" ),
                      QString( "this is a whatsthis" ) );
    KMessageBox::questionYesNo( 0, "Hello World", "Hello", guiItem );
}
</code>
</code>
First we Subclass KXmlGuiWindow on line 7 with <tt>class MainWindow : public KXmlGuiWindow</tt>.
Ensimmäinen KDE-luokka tässä ohjelmassa on {{class|KAboutData}}. Tämä luokka tallentaa ohjelman tiedot, kuten lyhyen kuvauksen, ylläpitäjätiedot, lisenssitiedot, jne. Lähestulkoon kaikissa KDE ohjelmissa tulisi olla tämä luokka.


Then we declare the constructor with <tt>MainWindow(QWidget *parent=0);</tt>.
Seuraavana on {{class|KCmdLineArgs}}. Tämän luokan tarkoituksena on määritellä komentorivin argumentit, esimerkiksi, avataksesi ohjelman tietyn tiedoston kanssa. Kuitenkin, tässä perehdytyksessä, me yksinkertaisesti alustamme sen {{class|KAboutData}} objektilla, jonka ensimmäisessä kohdassa loimme, jotta voimme käyttää <tt>--version</tt> tai <tt>--author</tt> kytkimiä.


And finally we declare a pointer to the object that will make up the bulk of our program. {{class|KTextEdit}} is a generic richtext editor with some KDE niceties like cursor auto-hiding.
Kolmantena luomme {{class|KApplication}} objektin. Tämä on tarpeellinen jokaisessa ohjelmassa, koska esim. [[Development/Tutorials/Localization/i18n|i18n]] tarvitsee {{class|KApplication}}:n.


===mainwindow.cpp===
Kaikki KDE:n vaatimat asettelut on nyt tehty ja voimme siirtyä tekemään mielenkiintoisempia asioita ohjelmallemme. Seuraavana on tarkoitus luoda pop-up-ikkuna sekä muokata yhtä painonappia mieleiseksemme. Painonapin muokkauksessa käytämme {{class|KGuiItem}}-objektia. {{class|KGuiItem}}:n ensimmäinen parametri muodostajassa määrittelee painonapissa näytettävän tekstin. Seuraava parametri määrittelisi {{class|KGuiItem}}:n ikonin, joka tässä tapauksessa on jätetty tyhjäksi antamalla argumentiksi <tt>QString()</tt>(tyhjä QString). Viimeisenä asetamme käytönaikaisen vihjeen (joka näytetään kun hiiren osoitin pysähtyy hetkeksi objektin päälle) sekä "Mikä tämä on?"-selvityksen(Näytetään hiiren oikean napin klikkauksen tai Shift-F1 kautta).
<code cppqt n>
#include "mainwindow.h"


MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent)
Painonappi on nyt valmis ja voimme luoda pop-up-ikkunan. Me kutsumme <tt>{{class|KMessageBox}}::questionYesNo()</tt>-funktiota tähän tarkoitukseen, joka oletuksena luo viesti-ikkunan varustettuna "Kyllä" ja "Ei" painonapeilla. Funktion toinen argumentti määrittelee tekstin jäka näytetään keskellä pop-up-laatikkoa. Kolmas argumentti kertoo funktiolle ikkunan nimen, ja viimeisenä kerromme että korvaamme "Yes"-painonapin luomallamme <tt>KGuiItem guiItem</tt> objektilla.
{
 
  textArea = new KTextEdit();
Nyt olemme käyneet koodin läpi vaihe vaiheelta ja valmiitä kokeilemaan kääntämistä ja ohjelman suoritusta.
  setCentralWidget(textArea);
 
  setupGUI();
==Kääntäminen==
}
Jos olet asettanut ohjelmointiympäristösi kuten [[Getting Started/Build/KDE4]]:ssa on neuvottu voit kääntää koodin seuraavasti:
<code>
g++ main.cpp -o tutorial1 \
-I$QTDIR/include/Qt \
-I$QTDIR/include/QtCore \
-I$QTDIR/include \
-I$KDEDIR/include/KDE \
-I$KDEDIR/include \
-L$KDEDIR/lib \
-L$QTDIR/lib -lQtCore -lQtGui -lkdeui -lkdecore
</code>
</code>
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 KXmlGuiWindow's built-in setCentralWidget() function which tells the KXmlGuiWindow what should appear in the central section of the window.
Ja ohjelman käynnistys seuraavasti:
<code>
dbus-launch ./tutorial1
</code>


Finally, KXmlGuiWindow::setupGUI() is called which does a lot of behind-the-scenes stuff and creates the default menu bars (Settings, Help).
===CMaken käyttäminen===
Jos edellinen käännös onnistui, voit kokeilla [[Development/Tutorials/CMake (fi)|CMaken]] käyttöä, kuten KDE 4 ympäristössä olisi tarkoitus. CMake automaattisesti etsii KDE:n, Qt:n, yms. kirjastot ja otsikkotiedostot sekä tekee ohjelmistojesi kääntämisen helpoksi muissakin järjestelmissä.


==Back to main.cpp==
====CMakeLists.txt====
In order to actually run this window, we need to add a few lines in main.cpp:
Luo CMakeLists.txt-niminen tiedosto samaan hakemistoon jossa main.cpp sijaitsee ja kopioi alla oleva koodi siihen:
===main.cpp===
<code ini n>
<code cppqt n>
project (tutorial1)
#include <KApplication>
#include <KAboutData>
#include <KCmdLineArgs>


#include "mainwindow.h"
find_package(KDE4 REQUIRED)
include_directories(${KDE4_INCLUDES})


int main (int argc, char *argv[])
set(tutorial1_SRCS main.cpp)
{
  KAboutData aboutData( "tutorial2", 0,
      ki18n("Tutorial 2"), "1.0",
      ki18n("A simple text area"),
      KAboutData::License_GPL,
      ki18n("Copyright (c) 2007 Developer") );
  KCmdLineArgs::init( argc, argv, &aboutData );
 
  KApplication app;
  MainWindow* window = new MainWindow();
  window->show();


  return app.exec();
kde4_add_executable(tutorial1 ${tutorial1_SRCS})
}
target_link_libraries(tutorial1 ${KDE4_KDEUI_LIBS})
</code>
</code>
The only new lines here (compared to Tutorial 1) are 5, 18 and 19. On line 18, we create our MainWindow object and then on line 19, we display it.
<tt>find_package()</tt>-funktio etsii haluamasi paketin, tässä tapauksessa KDE4 sekä asettaa eräitä parametrejä jotka selvittävät paketin kirjastojen ja otsikkotiedostojen sijainnin. Tässä tapauksessa käytämme <tt>KDE4_INCLUDES</tt>-muuttujaa jossa on tieto KDE4:n otsikkotiedostojen sijainnista.
 
Jotta kääntäjä löytäisi nämä otsikkotiedostot, annamme tämän muuttujan <tt>include_directories()</tt>-funktiolle, joka lisää KDE4 otsikkotiedostot otsikkotiedostojen etsintäpolkuun.


==CMake==
Seuraavana luomme <tt>tutorial1_SRCS</tt>-nimisen muuttujan <tt>set()</tt>-funktiota apuna käyttäen. Muuttujan arvoksi tulee lähdekooditiedostomme nimi.
The best way to build the program is to use CMake. All that's changed since tutorial 1 is that <tt>mainwindow.cpp</tt> has been added to the sources list and any <tt>tutorial1</tt> has become <tt>tutorial2</tt>.
===CMakeLists.txt===
<code ini n>
project (tutorial2)


find_package(KDE4 REQUIRED)
<tt>kde4_add_executable()</tt>-funktiokutsun avulla luomme <tt>tutorial1</tt>-nimisen suoritettavan binäärin lähdekooditiedostoista jotka on määritelty <tt>tutorial1_SRCS</tt>-muuttujassa. Viimeisenä linkitämme suoritettavan binääritiedoston <tt>target_link_libraries()</tt>-funktiota sekä <tt>KDE4_KDEUI_LIBS</tt> muuttujia apuna käyttäen KDE4 kdeui-kirjastoon. <tt>KDE4_KDEUI_LIBS</tt> muuttuja luotiin myös <tt>find_package()</tt>-funktiossa.
include_directories(${KDE4_INCLUDES})


set(tutorial2_SRCS
====Käännös ja suoritus====
  main.cpp
Edelleen, jos olet asettanut ohjelmointiympäristösi kuten [[Getting Started/Build/KDE4]]:ssa on neuvottu voit kääntää koodin seuraavasti:
  mainwindow.cpp
<code>
)
cmakekde
</code>


kde4_add_executable(tutorial2 ${tutorial2_SRCS})
tai ellet, niin:
target_link_libraries(tutorial2 ${KDE4_KDEUI_LIBS})
<code>
mkdir build && cd build
cmake ..
make
</code>
</code>


===Compile it===
Ja suoritus:
To compile, link and run it, use:
<code>
mkdir build && cd build
  ./tutorial1
  cmake ..
</code>
make
./tutorial2


==Moving On==
==Seuraavaksi==
Now you can move on to [[Development/Tutorials/Using_KActions|using KActions]].
Seuraavaksi voit jatkaa [[Development/Tutorials/Using_KXmlGuiWindow (fi)|Main-ikkunan luonti]] - perehdytykseen.


[[Category:C++]]
[[Category:C++]]

Revision as of 19:35, 10 January 2008


Development/Tutorials/First_program

Perehdytys 1 - Hei Maailma!
Tutorial Series   Beginner Tutorial
Previous   C++, Qt, KDE4 development environment
What's Next   Perehdytys 2 - Main-ikkunan luonti
Further Reading   CMake

Lyhyesti

Ensimmäisen ohjelmasi tulisi tervehtiä maailmaa "Hei Maailma!"-viestillä, vai mitä? Tätä tarkoitukseen käytämme KMessageBox-luokkaa, ja muokkaamme yhtä painonappia.

Tip
Konqueror tarjoaa nopean tavan hankkia lisätietoja mistä tahansa KDE:n luokasta. Esimerkiksi, jos haluat lisätietoja KMessageBox - luokasta, kirjoita Konquerorin osoitekenttään "kde:kmessagebox".


Tip
KDevelop on erinomainen IDE kehitettäessä KDE- ja Qt C++-sovelluksia. Se sisältää integroidun debuggerin, tehokkaan editorin syntaksikorostuksella, Projektivelhon sovellusten luomiseksi mallinneista ja jopa luokkadokumentoinnit. Lisätietoja yksityiskohdista voi myös löytää KDevelop wiki sivustossa.

Ohjeita siitä kuinka käyttää KDevelop-ohjelmaa KDE 4-sovellusten kanssa on saatavilla tällä sivulla

Silti sinun tarvitsee vielä muokata CMake tiedostot käsin.


Koodi

Kaikki tarvittava koodi voidaan sijoittaa yhteen tiedostoon. Luo tiedosto main.cpp ja kopioi alla oleva koodi siihen:

  1. include <KApplication>
  2. include <KAboutData>
  3. include <KCmdLineArgs>
  4. include <KMessageBox>

int main (int argc, char *argv[]) {

   KAboutData aboutData("tutorial1",                  // Ohjelman nimi järjestelmän käyttöön.
                        0,                            // Nimi viestiluetteluun, käytä ohjelmannimeä jos nolla.
                        ki18n("Tutorial 1"),          // Näytettävä ohjelman nimi.
                        "1.0",                        // Ohjelman versionumero. Merkkijono.
                        ki18n("KMessageBox popup"),   // Lyhyt kuvaus siitä mitä ohjelma tekee.
                        KAboutData::License_GPL,      // Lisenssin tunniste
                        ki18n("(c) 2007"),            // Tekijänoikeusmerkintä
                        ki18n("Some text..."),        // Vapaata tekstiä..
                        "http://tutorial.com",        // Ohjelman kotisivu.
                        "[email protected]");       // Sähköpostiosoite bugien raportoimista varten.
   KCmdLineArgs::init( argc, argv, &aboutData );
   KApplication app;
   KGuiItem guiItem( QString( "Hello" ), QString(),
                     QString( "this is a tooltip" ),
                     QString( "this is a whatsthis" ) );
   KMessageBox::questionYesNo( 0, "Hello World", "Hello", guiItem );

} Ensimmäinen KDE-luokka tässä ohjelmassa on KAboutData. Tämä luokka tallentaa ohjelman tiedot, kuten lyhyen kuvauksen, ylläpitäjätiedot, lisenssitiedot, jne. Lähestulkoon kaikissa KDE ohjelmissa tulisi olla tämä luokka.

Seuraavana on KCmdLineArgs. Tämän luokan tarkoituksena on määritellä komentorivin argumentit, esimerkiksi, avataksesi ohjelman tietyn tiedoston kanssa. Kuitenkin, tässä perehdytyksessä, me yksinkertaisesti alustamme sen KAboutData objektilla, jonka ensimmäisessä kohdassa loimme, jotta voimme käyttää --version tai --author kytkimiä.

Kolmantena luomme KApplication objektin. Tämä on tarpeellinen jokaisessa ohjelmassa, koska esim. i18n tarvitsee KApplication:n.

Kaikki KDE:n vaatimat asettelut on nyt tehty ja voimme siirtyä tekemään mielenkiintoisempia asioita ohjelmallemme. Seuraavana on tarkoitus luoda pop-up-ikkuna sekä muokata yhtä painonappia mieleiseksemme. Painonapin muokkauksessa käytämme KGuiItem-objektia. KGuiItem:n ensimmäinen parametri muodostajassa määrittelee painonapissa näytettävän tekstin. Seuraava parametri määrittelisi KGuiItem:n ikonin, joka tässä tapauksessa on jätetty tyhjäksi antamalla argumentiksi QString()(tyhjä QString). Viimeisenä asetamme käytönaikaisen vihjeen (joka näytetään kun hiiren osoitin pysähtyy hetkeksi objektin päälle) sekä "Mikä tämä on?"-selvityksen(Näytetään hiiren oikean napin klikkauksen tai Shift-F1 kautta).

Painonappi on nyt valmis ja voimme luoda pop-up-ikkunan. Me kutsumme KMessageBox::questionYesNo()-funktiota tähän tarkoitukseen, joka oletuksena luo viesti-ikkunan varustettuna "Kyllä" ja "Ei" painonapeilla. Funktion toinen argumentti määrittelee tekstin jäka näytetään keskellä pop-up-laatikkoa. Kolmas argumentti kertoo funktiolle ikkunan nimen, ja viimeisenä kerromme että korvaamme "Yes"-painonapin luomallamme KGuiItem guiItem objektilla.

Nyt olemme käyneet koodin läpi vaihe vaiheelta ja valmiitä kokeilemaan kääntämistä ja ohjelman suoritusta.

Kääntäminen

Jos olet asettanut ohjelmointiympäristösi kuten Getting Started/Build/KDE4:ssa on neuvottu voit kääntää koodin seuraavasti:

g++ main.cpp -o tutorial1 \
-I$QTDIR/include/Qt \
-I$QTDIR/include/QtCore \
-I$QTDIR/include \
-I$KDEDIR/include/KDE \
-I$KDEDIR/include \
-L$KDEDIR/lib \
-L$QTDIR/lib -lQtCore -lQtGui -lkdeui -lkdecore

Ja ohjelman käynnistys seuraavasti:

dbus-launch ./tutorial1

CMaken käyttäminen

Jos edellinen käännös onnistui, voit kokeilla CMaken käyttöä, kuten KDE 4 ympäristössä olisi tarkoitus. CMake automaattisesti etsii KDE:n, Qt:n, yms. kirjastot ja otsikkotiedostot sekä tekee ohjelmistojesi kääntämisen helpoksi muissakin järjestelmissä.

CMakeLists.txt

Luo CMakeLists.txt-niminen tiedosto samaan hakemistoon jossa main.cpp sijaitsee ja kopioi alla oleva koodi siihen: project (tutorial1)

find_package(KDE4 REQUIRED) include_directories(${KDE4_INCLUDES})

set(tutorial1_SRCS main.cpp)

kde4_add_executable(tutorial1 ${tutorial1_SRCS}) target_link_libraries(tutorial1 ${KDE4_KDEUI_LIBS}) find_package()-funktio etsii haluamasi paketin, tässä tapauksessa KDE4 sekä asettaa eräitä parametrejä jotka selvittävät paketin kirjastojen ja otsikkotiedostojen sijainnin. Tässä tapauksessa käytämme KDE4_INCLUDES-muuttujaa jossa on tieto KDE4:n otsikkotiedostojen sijainnista.

Jotta kääntäjä löytäisi nämä otsikkotiedostot, annamme tämän muuttujan include_directories()-funktiolle, joka lisää KDE4 otsikkotiedostot otsikkotiedostojen etsintäpolkuun.

Seuraavana luomme tutorial1_SRCS-nimisen muuttujan set()-funktiota apuna käyttäen. Muuttujan arvoksi tulee lähdekooditiedostomme nimi.

kde4_add_executable()-funktiokutsun avulla luomme tutorial1-nimisen suoritettavan binäärin lähdekooditiedostoista jotka on määritelty tutorial1_SRCS-muuttujassa. Viimeisenä linkitämme suoritettavan binääritiedoston target_link_libraries()-funktiota sekä KDE4_KDEUI_LIBS muuttujia apuna käyttäen KDE4 kdeui-kirjastoon. KDE4_KDEUI_LIBS muuttuja luotiin myös find_package()-funktiossa.

Käännös ja suoritus

Edelleen, jos olet asettanut ohjelmointiympäristösi kuten Getting Started/Build/KDE4:ssa on neuvottu voit kääntää koodin seuraavasti: cmakekde

tai ellet, niin: mkdir build && cd build cmake .. make

Ja suoritus:

./tutorial1

Seuraavaksi

Seuraavaksi voit jatkaa Main-ikkunan luonti - perehdytykseen.