Development/Tutorials/First program (se)

From KDE TechBase
Revision as of 09:45, 14 July 2012 by AnneW (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Hello World
Tutorial Series   Beginner Tutorial
Previous   C++, Qt, KDE4 development environment
What's Next   Tutorial 2 - KXmlGuiWindow
Further Reading   CMake

Abstract

Ditt första program ska hälsa världen med ett vänligt "Hello World", vad annars? För att åstadkomma det kommer vi att använda KMessageBox och anpassa en av knapparna.

Tip
Konqueror tillhandahåller en snabb genväg för att erhålla mer information om klasser som du springer på. Så för att hitta information om KMessageBox, skriv bara "kde:kmessagebox" i konqueror och du kommer direkt till dokumentationen.


Tip
Det kan vara en god idé att använda KDevelop för dina project, som erbjuder många trevliga saker, som t.e.x. kod-komplettering, enkel tillgång till API dokumentationen och debugging stöd.

Läs this tutorial för att anpassa KDevelop för denna uppgift. Du vill förmodligen testa att konfigurationen fungerar genom att öppna en existerande KDE 4 applikation med KDevelop först.

Du måste dock fortfarande editera CMake filerna för hand.


Koden

All kod vi behöver är i en fil, main.cpp. Skapa denna fil med nedanstående kod:

#include <QString>
#include <KApplication>
#include <KAboutData>
#include <KMessageBox>
#include <KCmdLineArgs>
#include <KLocalizedString>

int main (int argc, char *argv[])
{
    KAboutData aboutData("tutorial1",                  // Programnamnet som används internt.
                         0,                            // The message catalog name, use program name if null.
                         ki18n("Tutorial 1"),          // En visningsbar programnamssträng.
                         "1.0",                        // Programversionssträngen.
                         ki18n("KMessageBox popup"),   // En kort beskrivning av vad programmet gör.
                         KAboutData::License_GPL,      // Licensidentifierare
                         ki18n("(c) 2007"),            // Copyright Statement
                         ki18n("Some text..."),        // Lite fritext, som kan innehålla vilken information som helst.
                         "http://tutorial.com",        // Programhemsidesträngen.
                         "[email protected]");       // The bug report email address string.

    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 );
}

Den första KDE specifika koden som vi stöter på i det här programmet är KAboutData. Det här är klassen som används för att lagra information om programmet, som t.e.x. en kort beskrivning, upphovsmän eller licensinformation. I stort sett alla KDE applikationer använder den här klassen.

Sen kommer vi till KCmdLineArgs. Det här är klassen som man använder för att ange "command line switches" till, t.e.x., öppna programmet med en viss fil. I den här övningen så initierar vi dock den med KAboutData objektet vi skapade, så att vi kan använda --version och --author switcharna.

På rad 13 skapar vi ett KApplication objekt. Det här måste göras exakt en gång i varje program, eftersom det behövs för saker som i18n.

Nu har vi utfört all nödvändig KDE initiering, och kan gå vidare till att göra intressantare saker med vår applikation. Vi ska skapa ett "popup" fönster med en anpassad knapp. För att göra anpassningen så måste vi använda ett KGuiItem objekt. Det första argumentet i KGuiItem konstruktorn är texten som ska visas i föremålet (i vårt fall, en knapp). Sen kan vi välja att ange en ikon för vår knapp, men det vill vi inte här så vi ger den bara QString(). Till slut så sätter vi "tooltippen" (det som blir synligt när vi rör musen över ett föremål) och efter det "What's This" (åtkommlig genom högerklick eller Shift-F1) texten.

Nu har vi vårt föremål, och kan skapa vår "popup". Vi anropar KMessageBox::questionYesNo() funktionen som, by default, skapar ett textfönster med en "Yes" och en "No" knapp. Det andra argumentet är texten som kommer att visas i mitten av "popup" fönstret. Det tredje argumentet är rubriken som fönstret kommer att ha och till slut så sätter vi KGuiItem för (det som normalt skulle vara) "Yes" knappen till KGuiItem guiItem som vi skapade.

Vi är färdiga nu, om man bara ser till koden. Nu ska vi bygga och testa det också.

Bygga

Om du har satt upp din miljö som det står beskrivet i Getting_Started/Build/KDE4, så kan du kompilera koden så här:

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

och sen köra den med:

dbus-launch ./tutorial1

Att använda CMake

Om det fungerade så vill du förmodligen använda CMake, som resten av KDE gör. Det kommer automatiskt att leta upp biblioteken och header-filerna för KDE, wt, osv. och gör att du enkelt kan bygga koden på andra datorer också.

CMakeLists.txt

Skapa en fil som heter CMakeLists.txt i samma bibliotek som main.cpp, med följande innehåll:

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() funktionen letar reda på paketet som du frågar efter (i det här fallet KDE4) och sätter några variabler som beskriver var paketets "headers" och bibliotek finns. I det här fallet använder vi KDE4_INCLUDES variabeln, som innehåller sökvägen till KDE4'as "header" filer.

För att förmå kompilatorn att hitta dessa filer så skickar vi in den variabeln till include_directories() funktionen, som lägger till KDE4 "headers" till "header" sökvägen.

Nu skapar vi en variabel som vi kallar tutorial1_SRCS genom att använda set() funktionen. I det här fallet så sätter vi den helt enkelt till namnet på vår enda källkodsfil.

Sen använder vi kde4_add_executable() för att skapa en exekverbar fil kallad tutorial1 från källkodsfilen som vi listade i tutorial1_SRCS variabeln. Till slut så länkar vi vår exekverbara fil med KDE4's kdeui bibliotek, med hjälp av target_link_libraries() och KDE4_KDEUI_LIBS variabeln som var satt av find_package() funktionen.

Bygg och kör

Igen, om du har satt upp din miljö som beskrivet i

Getting Started/Build/KDE4, så kan du kompilera koden med:
cmakekde

Och starta den med:

./tutorial1.shell

Fortsättning

Nu kan du fortsätta med using KXmlGuiWindow.