Development/Tutorials/First program (ca): Difference between revisions

From KDE TechBase
m (Text replace - "</code>" to "</syntaxhighlight>")
No edit summary
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
{{Template:I18n/Language Navigation Bar|Development/Tutorials/First_program}}
 
{{TutorialBrowser (ca)|
{{TutorialBrowser (ca)|


Line 103: Line 103:
====CMakeLists.txt====
====CMakeLists.txt====
Crea un fitxer anomenat CMakeLists.txt al mateix directori que main.cpp amb aquest codi:
Crea un fitxer anomenat CMakeLists.txt al mateix directori que main.cpp amb aquest codi:
<code>
<syntaxhighlight lang="text">
project (tutorial1)
project (tutorial1)



Latest revision as of 16:12, 15 July 2012

Hola món
Sèrie de Tutorials   Tutorial de Principiants
Prerequisits   C++(anglès), Qt(anglès), KDE4 development environment
Què ve després   Tutorial 2 - KXmlGuiWindow
Referències   CMake

Abstracció

El teu primer programa hauria de donar la benvinguda al món amb un cordial "Hola Món", que sinó? Per això, farem us de la classe KMessageBox i adaptarem un dels botons.

Tip
Per a obtindre més informació sobre qualsevol classe que trobis, el Konqueror t'ofereix una manera ràpida de veure-la. Així que si per exemple busquem informació sobre la classe KMessageBox, només escriu "kde:kmessagebox" al Konqueror i et portarà directament a la documentació d'aquesta classe.


Tip
Pots voler fer servir KDevelop per als teus projectes, el qual fa moltes coses boniques com autocompletació de codi, fàcil accés a la documentació de la API o suport per a depuració.

Llegeix aquest tutorial per a configurar correctament KDevelop per a aquesta tasca. Provablement voldràs verificar si la configuració funciona obrint una aplicació existent de KDE 4 amb KDevelop abans.

Encara necessitaràs però editar a mà els fitxers CMake.


El Codi

Tot el codi que necessitem estarà en un fitxer, main.cpp. Crea aquest fitxer i posa-hi el codi de sota:

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

int main (int argc, char *argv[])
{
    KAboutData aboutData(
                         // El nom del programa emprat internament.
                         "tutorial1",
                         // El nom del catàleg de missatges
                         // Si és nul, s'empra el nom del programa.
                         0,
                         // Una cadena amb el nom del programa a mostrar.
                         ki18n("Tutorial 1"),
                         // La cadena amb la versió del programa.
                         "1.0",
                         // Descripció curta de que fa l'aplicació.
                         ki18n("Mostra una finestra emergent KMessageBox"),
                         // La llicencia d'aquest codi
                         KAboutData::License_GPL,
                         // Nota de Copyright
                         ki18n("(c) 2007"),
                         // Text opcional mostrat a la caixa de Sobre.
                         // Pot contindre qualsevol informació que es dessitgi.
                         ki18n("Algun text..."),
                         // La candena amb la plana del programa.
                         "http://tutorial.com/",
                         // L'adreça d'email per a informar d'un error
                         "[email protected]");

    KCmdLineArgs::init( argc, argv, &aboutData );
    KApplication app;
    KGuiItem yesButton( i18n( "Hola" ), QString(),
                        i18n( "Això és un tooltip" ),
                        i18n( "Això és un text d'ajuda del sobre." ) );
    KMessageBox::questionYesNo( 0, i18n( "Hola Món" ),
                                i18n( "Hola" ), yesButton );
}

El primer codi especific de KDE amb el que ens trobem en aquest programa és KAboutData. Aquesta és la classe emprada per a emmagatzemar informació sobre Habitualment qualsevol aplicació KDE hauria d'emprar aquesta classe.

Després arribem a KCmdLineArgs. Aquesta és la classe que emprarem per passar arguments des de la línia de comandes, com per exemple, passar-li al programa un fitxer a obrir. Tot i això, en aquest tutorial, senzillament l'inicialitzarem amb l'objecte KAboutData que hem creat així que podrem emprar els paràmetres --version o --author.

Llavors creem un objecte KApplication. Això s'ha de fer exactament una vegada a cada programa ja que es necessita per a coses com ara i18n.

Ara hem fet tot el necessari per a la configuració KDE, podem començar a fer coses interessants amb la nostra aplicació. Crearem una finestra emergent però modificarem un dels botons. Per a fer aquesta modificació, necessitarem emprar un objecte KGuiItem. El primer argument al contructor de la classe KGuiItem és el text que volem que aparegui a l'objecte (en el nostre cas, un botó). Llavors tenim una opció d'establir una icona per al botó però en volem cap així que li passem QString(). Podem llavors establir el tooltip (el que apareix quan passes per sobre d'un element) i finalment el "Quant a" (accessible amb el botó dret del ratolí o prement Majuscules-F1).

Ara que tenim el nostre objecte, podem crear la nostra finestra emergent. Cridem a la funció KMessageBox::questionYesNo() la que, per defecte, crea una caixa d'informació amb un botó "Sí" o "No". El segon argument és el text que apareixerà a la caixa d'informació sobre els butons. El tercer és el títol que la finestra tindrà i finalment establim el KGuiItem per (el que seria normal) el botó "Sí" que a KGuiItem guiItem hem creat.

Nota que tot el text visible per a l'usuari és passa a través de la funció i18n(); això és necessari per que la UI sigui traduible. Més informació sobre la localització es pot trobar al localization tutorial.

Ja hem acabat pel que fa al codi. Ara a compilar-lo i provar-lo.

Compilar

Si has configurat el teu entorn com es descriu a Getting Started/Build/KDE4, pots compilar aquest codi amb

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

i llavors executar-lo amb

dbus-launch ./tutorial1


Emprant CMake

Si això ha funcionat, pots voler emprar CMake, com la resta de KDE. Això localitzarà automàticament les teves llibreries i capçaleres de KDE, Qt, etc. i et permetrà fàcilment compilar les teves aplicacions en altres ordinadors.

CMakeLists.txt

Crea un fitxer anomenat CMakeLists.txt al mateix directori que main.cpp amb aquest codi:

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

La funció find_package() troba el paquet que li demanes (en aquest cas KDE4) i estableix algunes variables descrivint la localització de les capçaleres dels paquests i les seves llibreries. En aquest cas emprarem la variable KDE4_INCLUDES que conté la ruta a les capçaleres de KDE4.

Per tal de permetre al compilador trobar aquests fitxers, li passem aquesta variable amb la funció include_directories() la qual afegeix les capçaleres KDE4 a la ruta de cerca de capçaleres.

Seguidament creem una variable anomenada tutorial1_SRCS emprant la funció set(). En aquest cas senzillament li posem el nom del nostre únic fitxer de codi.

Deprés emprem kde4_add_executable() per crear un executable anomenat tutorial1 des dels fitxers de codi font llistats la nostre variable tutorial1_SRCS. Finalment enllacem els nostre executable a la llibreria KDE4 kdeui emprant target_link_libraries() i la variable KDE4_KDEUI_LIBS la qual ha estat establerta per la funció find_package().

Compilant i executant

Pots incovar CMake i executar make manualment:

mkdir build && cd build
cmake .. # Nota els dos punts - això no és elipsis, sinó "directori pare".
make

O, si estableix el seu entorn com es descriu a Getting Started/Build/KDE4, pots compilar aquest codi amb:

cmakekde


I executar-lo amb:

./tutorial1

Continuar

Ara pots continuar a emprant KXmlGuiWindow.