Development/Tutorials/First program (it): Difference between revisions
Traduzione completa |
No edit summary |
||
(9 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{TutorialBrowser_(it)| | {{TutorialBrowser_(it)| | ||
Line 8: | Line 8: | ||
pre=[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html C++], [http://www.trolltech.com/products/qt/ Qt], [[Getting_Started/Build/KDE4|KDE4 development environment]]| | 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/ | next=[[Development/Tutorials/Using_KXmlGuiWindow_(it)|Tutorial 2 - KXmlGuiWindow]]| | ||
reading=[[Development/Tutorials/CMake|CMake]] | reading=[[Development/Tutorials/CMake|CMake]] | ||
Line 16: | Line 16: | ||
Il tuo primo programma dovrebbe salutare il mondo con un amichevole "Ciao Mondo", giusto? Per farlo, useremo un {{class|KMessageBox}} personalizzando uno dei pulsanti. | Il tuo primo programma dovrebbe salutare il mondo con un amichevole "Ciao Mondo", giusto? Per farlo, useremo un {{class|KMessageBox}} personalizzando uno dei pulsanti. | ||
[[image:Ciaomondo_tutorial1.png|frame|center]] | [[image:Ciaomondo_tutorial1.png|frame|center]] | ||
Line 29: | Line 30: | ||
Tutto il codice di cui abbiamo bisogno starà in un file, <tt>main.cpp</tt>. Crealo con il codice qua sotto: | Tutto il codice di cui abbiamo bisogno starà in un file, <tt>main.cpp</tt>. Crealo con il codice qua sotto: | ||
< | <syntaxhighlight lang="cpp-qt"> | ||
#include <KApplication> | #include <KApplication> | ||
#include <KAboutData> | #include <KAboutData> | ||
#include <KCmdLineArgs> | #include <KCmdLineArgs> | ||
#include <KMessageBox> | #include <KMessageBox> | ||
#include <QByteArray> | |||
int main (int argc, char *argv[]) | int main (int argc, char *argv[]) | ||
Line 43: | Line 45: | ||
// Se nullo, verrà usato il nome del programma. | // Se nullo, verrà usato il nome del programma. | ||
0, | 0, | ||
// Una stringa con il nome del programma | // Una stringa con il nome del programma. | ||
// Quella che verrà effettivamente visualizzata. | |||
ki18n("Tutorial 1"), | ki18n("Tutorial 1"), | ||
// La stringa con la versione del programma. | // La stringa con la versione del programma. | ||
Line 49: | Line 52: | ||
// Piccola descrizione su cosa fa il programma. | // Piccola descrizione su cosa fa il programma. | ||
ki18n("Visualizza una finestra KMessageBox."), | ki18n("Visualizza una finestra KMessageBox."), | ||
// La licenza | // La licenza con la quale il codice è rilasciato. | ||
KAboutData::License_GPL, | KAboutData::License_GPL, | ||
// Copyright | // Copyright | ||
ki18n("(c) 2007"), | ki18n("(c) 2007"), | ||
// Testo opzionale mostrato | // Testo opzionale mostrato in "Informazioni su". | ||
// Può contenere qualunque informazione desiderata. | // Può contenere qualunque informazione desiderata. | ||
ki18n("Un po' di testo..."), | ki18n("Un po' di testo..."), | ||
// La stringa con la homepage del programma. | // La stringa con la homepage del programma. | ||
"http://tutorial.com/", | QByteArray("http://tutorial.com/"), | ||
// L'indirizzo email per la segnalazione di bug. | // L'indirizzo email per la segnalazione di bug. | ||
"submit@bugs.kde.org"); | QByteArray("submit@bugs.kde.org")); | ||
KCmdLineArgs::init( argc, argv, &aboutData ); | KCmdLineArgs::init( argc, argv, &aboutData ); | ||
Line 65: | Line 68: | ||
KGuiItem yesButton( i18n( "Ciao" ), QString(), | KGuiItem yesButton( i18n( "Ciao" ), QString(), | ||
i18n( "Questo è un tooltip" ), | i18n( "Questo è un tooltip" ), | ||
i18n( "Questo è un testo di aiuto | i18n( "Questo è un testo di aiuto CheCos'è?." ) ); | ||
KMessageBox::questionYesNo( 0, i18n( "Ciao Mondo" ), | KMessageBox::questionYesNo( 0, i18n( "Ciao Mondo" ), | ||
i18n( "Ciao" ), yesButton ); | i18n( "Ciao" ), yesButton ); | ||
return | return 0; | ||
} | } | ||
</ | </syntaxhighlight> | ||
Il primo codice specifico di KDE che incontriamo in questo programma è {{class|KAboutData}}. Questa è la classe utilizzata per immagazzinare le informazioni sul programma, come ad esempio una piccola descrizione, gli autori, o le informazioni sulla licenza. Praticamente ogni applicazione KDE dovrebbe usare questa classe. | Il primo codice specifico di KDE che incontriamo in questo programma è {{class|KAboutData}}. Questa è la classe utilizzata per immagazzinare le informazioni sul programma, come ad esempio una piccola descrizione, gli autori, o le informazioni sulla licenza. Praticamente ogni applicazione KDE dovrebbe usare questa classe. | ||
Line 94: | Line 97: | ||
Crea un file di nome CMakeLists.txt nella stessa cartella di main.cpp con questo contenuto: | Crea un file di nome CMakeLists.txt nella stessa cartella di main.cpp con questo contenuto: | ||
< | <syntaxhighlight lang="ini" line> | ||
project (tutorial1) | project (tutorial1) | ||
find_package(KDE4 REQUIRED) | find_package(KDE4 REQUIRED) | ||
include_directories(${KDE4_INCLUDES}) | include_directories(${KDE4_INCLUDES}) | ||
set(tutorial1_SRCS main.cpp) | |||
set(tutorial1_SRCS | |||
main.cpp | |||
) | |||
kde4_add_executable(tutorial1 ${tutorial1_SRCS}) | kde4_add_executable(tutorial1 ${tutorial1_SRCS}) | ||
target_link_libraries(tutorial1 ${KDE4_KDEUI_LIBS}) | target_link_libraries(tutorial1 ${KDE4_KDEUI_LIBS}) | ||
install(TARGETS tutorial1 ${INSTALL_TARGETS_DEFAULT_ARGS}) | install(TARGETS tutorial1 ${INSTALL_TARGETS_DEFAULT_ARGS}) | ||
</ | </syntaxhighlight> | ||
La funzione <tt>find_package()</tt> trova tutti i pacchetti che hai richiesto (in questo caso KDE4) ed imposta alcune variabili che descrivono la posizione degli header e delle librerie del pacchetto. In questo caso useremo la variabile <tt>KDE4_INCLUDES</tt> contenente il percorso ai files header di KDE4. | La funzione <tt>find_package()</tt> trova tutti i pacchetti che hai richiesto (in questo caso KDE4) ed imposta alcune variabili che descrivono la posizione degli header e delle librerie del pacchetto. In questo caso useremo la variabile <tt>KDE4_INCLUDES</tt> contenente il percorso ai files header di KDE4. | ||
Per permettere al compilatore di trovare questi files, passiamo quella variabile alla funzione <tt>include_directories()</tt> la quale aggiunge gli header di KDE4 al percorso di ricerca degli | Per permettere al compilatore di trovare questi files, passiamo quella variabile alla funzione <tt>include_directories()</tt> la quale aggiunge gli header di KDE4 al percorso di ricerca degli header. | ||
Poi creiamo una variabile chiamata <tt>tutorial1_SRCS</tt> con la funzione <tt>set()</tt>. In questo caso la impostiamo con il nome del nostro unico file sorgente. | Poi creiamo una variabile chiamata <tt>tutorial1_SRCS</tt> con la funzione <tt>set()</tt>. In questo caso la impostiamo con il nome del nostro unico file sorgente. | ||
Line 118: | Line 125: | ||
mkdir build && cd build | mkdir build && cd build | ||
cmake .. # Nota questi due punti - non è una mancanza, | cmake .. # Nota questi due punti - non è una mancanza, | ||
# stanno per "cartella superiore". | |||
make | make | ||
Oppure, se hai preparato il tuo ambiente come descritto in [[Getting_Started/Build/KDE4|Getting Started/Build/KDE4]], puoi compilare questo codice con: | Oppure, se hai preparato il tuo ambiente come descritto in [[Getting_Started/Build/KDE4|Getting Started/Build/KDE4]], puoi compilare questo codice con: | ||
cmakekde | cmakekde | ||
Quindi lancialo con: | Quindi lancialo con: | ||
./tutorial1 | ./tutorial1 | ||
== | == Continua == | ||
Ora puoi continuare verso [[Development/Tutorials/Using_KXmlGuiWindow|usare KXmlGuiWindow]]. | Ora puoi continuare verso [[Development/Tutorials/Using_KXmlGuiWindow|usare KXmlGuiWindow]]. | ||
[[Category:C++]] | [[Category:C++]] |
Latest revision as of 18:15, 15 July 2012
Collezione di Tutorial | Tutorial per Principianti |
Prerequisiti | C++, Qt, KDE4 development environment |
A Seguire | Tutorial 2 - KXmlGuiWindow |
Ulteriori Letture | CMake |
Prefazione
Il tuo primo programma dovrebbe salutare il mondo con un amichevole "Ciao Mondo", giusto? Per farlo, useremo un KMessageBox personalizzando uno dei pulsanti.

Leggi questo tutorial per configurare KDevelop correttamente. Puoi controllare se il setup è andato a buon fine aprendo un'applicazione KDE4 esistente con KDevelop.
Tuttavia hai ancora bisogno di editare a mano i files di CMake.
Il Codice
Tutto il codice di cui abbiamo bisogno starà in un file, main.cpp. Crealo con il codice qua sotto:
#include <KApplication>
#include <KAboutData>
#include <KCmdLineArgs>
#include <KMessageBox>
#include <QByteArray>
int main (int argc, char *argv[])
{
KAboutData aboutData(
// Il nome del programma, usato internamente.
"tutorial1",
// Il nome nel catalogo messaggi.
// Se nullo, verrà usato il nome del programma.
0,
// Una stringa con il nome del programma.
// Quella che verrà effettivamente visualizzata.
ki18n("Tutorial 1"),
// La stringa con la versione del programma.
"1.0",
// Piccola descrizione su cosa fa il programma.
ki18n("Visualizza una finestra KMessageBox."),
// La licenza con la quale il codice è rilasciato.
KAboutData::License_GPL,
// Copyright
ki18n("(c) 2007"),
// Testo opzionale mostrato in "Informazioni su".
// Può contenere qualunque informazione desiderata.
ki18n("Un po' di testo..."),
// La stringa con la homepage del programma.
QByteArray("http://tutorial.com/"),
// L'indirizzo email per la segnalazione di bug.
QByteArray("submit@bugs.kde.org"));
KCmdLineArgs::init( argc, argv, &aboutData );
KApplication app;
KGuiItem yesButton( i18n( "Ciao" ), QString(),
i18n( "Questo è un tooltip" ),
i18n( "Questo è un testo di aiuto CheCos'è?." ) );
KMessageBox::questionYesNo( 0, i18n( "Ciao Mondo" ),
i18n( "Ciao" ), yesButton );
return 0;
}
Il primo codice specifico di KDE che incontriamo in questo programma è KAboutData. Questa è la classe utilizzata per immagazzinare le informazioni sul programma, come ad esempio una piccola descrizione, gli autori, o le informazioni sulla licenza. Praticamente ogni applicazione KDE dovrebbe usare questa classe.
Poi arriviamo a KCmdLineArgs. Questa è la classe che si usa quando si vogliono specificare istruzioni da riga di comando per, ad esempio, aprire il programma con uno specifico file. Comunque, in questo tutorial, semplicemente lo inizializziamo con l'oggetto KAboutData che abbiamo appena creato, in modo da poter usare le opzioni --version o --author
Quindi adiamo a creare l'oggetto KApplication. Ciò bisogna farlo esattamente una volta in ogni programma, visto che è necessario per cose come l'i18n.
Ora che abbiamo finito con le operazioni indispensabili di KDE, possiamo cominciare a fare cose interessanti con la nostra applicazione. Creeremo una finestra pop-up, ma personalizzeremo uno dei pulsanti. Per la personalizzazione avremo bisogno di un oggetto KGuiItem. Il primo argomento del costruttore di KGuiItem è il testo che apparirà sull'oggetto (nel nostro caso, un pulsante). Quindi ci sarà un opzione per inserire un'icona, ma non ne vogliamo una così gli mettiamo QString. Impostiamo quindi il tooltip (quello che appare quando fermi il puntatore su un elemento) ed infine il testo "Che Cos'è?" (accessibile tramite click col tasto destro, con Shift-F1 oppure cliccando su "?" nella barra del titolo e poi sul pulsante "Ciao").
Ora che abbiamo il nostro pulsante, possiamo creare il nostro pop-up. Chiamiamo la funzione KMessageBox::questionYesNo() la quale, in modo predefinito, crea una finestra con due pulsanti "Si" e "No". Il secondo argomento compone il testo mostrato nella finestra sopra i due pulsanti. Il terzo è l'intestazione della finestra; e infine impostiamo il KGuiItem di (quello che normalmente è) il pulsante "Si" con il nostro KGuiItem yesButton appena creato.
Notare come tutto il testo visibile all'utente passa attraverso la funzione i18n(); questo è necessario per permettere la traduzione della UI. Più informazioni sulla localizzazione possono essere trovate nel tutorial sulla localizzazione.
Abbiamo finito per quanto riguarda il codice. Ora la compilazione e la prova.
Compilazione
Vorrai usare CMake come ambiente di compilazione. Devi fornire un file chiamato CMakeLists.txt, cmake usa questo file per generare tutti i Makefiles.
CMakeLists.txt
Crea un file di nome CMakeLists.txt nella stessa cartella di main.cpp con questo contenuto:
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})
install(TARGETS tutorial1 ${INSTALL_TARGETS_DEFAULT_ARGS})
La funzione find_package() trova tutti i pacchetti che hai richiesto (in questo caso KDE4) ed imposta alcune variabili che descrivono la posizione degli header e delle librerie del pacchetto. In questo caso useremo la variabile KDE4_INCLUDES contenente il percorso ai files header di KDE4.
Per permettere al compilatore di trovare questi files, passiamo quella variabile alla funzione include_directories() la quale aggiunge gli header di KDE4 al percorso di ricerca degli header.
Poi creiamo una variabile chiamata tutorial1_SRCS con la funzione set(). In questo caso la impostiamo con il nome del nostro unico file sorgente.
Quindi usiamo kde4_add_executable() per creare un eseguibile chiamato tutorial1 dai sorgenti elencati nella nostra variabile tutorial1_SRCS. In seguito, facciamo il link del nostro eseguibile alle librerie kdeui di KDE4 con target_link_libraries() e la variabile KDE4_KDEUI_LIBS precedentemente riempita dalla funzione find_package(). La riga che comincia con install scrive un target di default "install" dentro al Makefile.
Make ed Esecuzione
Puoi invocare CMake e make manualmente:
mkdir build && cd build cmake .. # Nota questi due punti - non è una mancanza, # stanno per "cartella superiore". make
Oppure, se hai preparato il tuo ambiente come descritto in Getting Started/Build/KDE4, puoi compilare questo codice con:
cmakekde
Quindi lancialo con:
./tutorial1
Continua
Ora puoi continuare verso usare KXmlGuiWindow.