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

From KDE TechBase
(csb translation (part))
 
No edit summary
 
(3 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Template:I18n/Language Navigation Bar|Development/Tutorials/First_program}}
 
{{TutorialBrowser|
{{TutorialBrowser|


Line 28: Line 28:
==Kòd==
==Kòd==
Wszëtczé kòdë jaczich je nót to le jeden lopk: <tt>main.cpp</tt>. Ùsôdzë gò z kòdã pòdónym niżi:
Wszëtczé kòdë jaczich je nót to le jeden lopk: <tt>main.cpp</tt>. Ùsôdzë gò z kòdã pòdónym niżi:
<code cppqt>
<syntaxhighlight lang="cpp-qt">
#include <KApplication>
#include <KApplication>
#include <KAboutData>
#include <KAboutData>
Line 50: Line 50:
                         // Licencëjô kòdu
                         // Licencëjô kòdu
                         KAboutData::License_GPL,
                         KAboutData::License_GPL,
                         // Aùtorsczi prawa
                         // Aùtorsczé prawa
                         ki18n("(c) 2007"),
                         ki18n("(c) 2007"),
                         // Òptacëjny tekst wëskrzeniony w òknie Ò programie.
                         // Òptacëjny tekst wëskrzeniony w òknie Ò programie.
Line 69: Line 69:
     return 0;
     return 0;
}
}
</code>
</syntaxhighlight>
The first KDE specific code we come across in this program is {{class|KAboutData}}. This is the class used to store information about the program such as a short description, authors or license information. Pretty much every KDE application should use this class.
Pierszi, òsoblëwi dlô KDE kòd jaczi chcemë pòznac w ti programie je {{class|KAboutData}}. Na klasa je brëkòwónô do trzëmaniô wëdowiédzë ò programie taczich jak krótczi òpisënk, aùtorowie czë licencëjô. W wikszi dzél programów bãdze zwëskôł z ti klasë.


Then we come to {{class|KCmdLineArgs}}. This is the class one would use to specify command line switches to, for example, open the program with a specific file. However, in this tutorial, we simply initialise it with the {{class|KAboutData}} object we created so we can use the <tt>--version</tt> or <tt>--author</tt> switches.
Dali przeńdzemë do {{class|KCmdLineArgs}}. Na klasa je brëkòwónô do trzëmaniô argùmentów zrëszeniowëch, na przëmiôr, òtmëkaniô editora z lopkã. Równak terô, më zajinicjalizëjëmë ją z òbiektã {{class|KAboutData}} żebë brëkòwac przełączników <tt>--version</tt> czë <tt>--author</tt>.


Then we create a {{class|KApplication}} object. This needs to be done exactly once in each program since it is needed for things such as [[Development/Tutorials/Localization/i18n|i18n]].
Zôs ùsôdzemë òbiekt {{class|KApplication}}. To mùszi bëc zrobioné le jeden rôz w kòżdi programie, ga je to nót dlô rzeczów taczich jak[[Development/Tutorials/Localization/i18n|i18n]].


Now we've done all the necessary KDE setup, we can move on to doing interesting things with our application. We're going to create a popup box but we're going to customise one of the buttons. To do this customisation, we need to use a {{class|KGuiItem}} object. The first argument in the {{class|KGuiItem}} constructor is the text that will appear on the item (in our case, a button). Then we have an option of setting an icon for the button but we don't want one so we just give it <tt>QString()</tt>. We then set the tooltip (what appears when you hover over an item) and finally the "What's This?" (accessed through right-clicking or Shift-F1) text.
Terô żlë mómë ju zrëchtowóné wszëtczi ùstawë, mòżemë jic dali z barżi jinteresującëma sprawama z nają aplikacëją. Chcemë ùsôdzëc dialogòwi òkno, ale dopasëjemë pòd se jedną z knąpów. Do etgò nót nama mdze òbiekt {{class|KGuiItem}}. Pierszi argùment w kònstruktorze {{class|KGuiItem}} to tekst jaczi wëskrzeni sã w elemence (w naszim przëtrôfkù to knąpa). Téj mómë òptacëjã bë dac ikònã dlô knąpë, ale ga më ji nie chcemë tedr dómë tu <tt>QString()</tt>. Dali je pòdpòwiesc (to cos co sã wëskrzeni jeżlë najachac na knąpã mëszą) a na kùńcu tekst dlô "Co to je?" (przëstãpné przez klëkniãcé prawą knąpą mëszë albò Shift-F1).


Now we have our item, we can create our popup. We call the <tt>{{class|KMessageBox}}::questionYesNo()</tt> function which, by default, creates a message box with a "Yes" and a "No" button. The second argument is the text that will appear in the message box above the buttons. The third is the caption the window will have and finally we set the KGuiItem for (what would normally be) the "Yes" button to the <tt>KGuiItem guiItem</tt> we created.
Terô czej momë nasz element, mòżemë ùsôdzëc dialogòwi òkno. Wëwòłamë fùnkcëjã <tt>{{class|KMessageBox}}::questionYesNo()</tt> co domëslnô wëskrzëniwô òko z knąpama "Jo", "Nié". Drëdżi argùment to tekst jaczi sã pòkaże w tekstowim pòlu nad knąpą. Trzecy to titel òkna a zôs przepiszemë KGuiItem dlô knąpë "Jo" do ùsôdzonégò chùdzy <tt>KGuiItem guiItem</tt>.


Note that all user-visible text is passed through the i18n() function; this is necessary for the UI to be translatable. More information on localization can be found in the [[Development/Tutorials/Localization/i18n|localization tutorial]].
Bôczë, że wszëtczi nôdpisë jaczi bãdą widzawné dlô brëkòwnika są wëwòłóné przez fùnkcëjã i18n(). To je mùsz dlô tegò, bë ne wiadła mògłé bëc przedolmaczoné. Wicy ò dolmaczënkach nalezc mòżesz w [[Development/Tutorials/Localization/i18n|ùczbòwnikù pò lokalizowanim]].


We're all done as far as the code is concerned. Now to build it and try it out.
Në, mómë ju fardich naji kòd. Terô czas na bùdowanié ë sprawdzenié.


== Bùdowanié ==
== Bùdowanié ==
You want to [[Development/Tutorials/CMake|use CMake]] for your build environment. You provide a file CMakeLists.txt, cmake uses this file to generate all Makefiles out of it.
Chcesz [[Development/Tutorials/CMake|ùżëc CMake]] dlô zbùdowaniô òkrãżégò. Môsz zrobioné lopk CMakeLists.txt, jaczi wëzwëska cmake do wëgenerowaniô wszëtczich lopków Makefile.


=== CMakeLists.txt ===
=== CMakeLists.txt ===
Create a file named CMakeLists.txt in the same directory as main.cpp with this content:
Ùsôdzë lopk nazwóny CMakeLists.txt w tim katalogù co main.cpp. W lopkù tim mô nalézc so zamkłosc:
<code>
<syntaxhighlight lang="cmake">
project (tutorial1)
project (tutorial1)
find_package(KDE4 REQUIRED)
find_package(KDE4 REQUIRED)
Line 98: Line 98:
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})
</code>
</syntaxhighlight>
The <tt>find_package()</tt> function locates the package that you ask it for (in this case KDE4) and sets some variables describing the location of the package's headers and libraries. In this case we will use the <tt>KDE4_INCLUDES</tt> variable which contains the path to the KDE4 header files.
Fùnkcëjô <tt>find_package()</tt> szëkô za paczétã jaczi żądôsz (w tim przëmiôrze KDE4) ë ùstawiô niechtërne zmieniwne co òpisëją môl w jaczim nalézc jidze nagówczi i biblioteczi paczétów. Tu mdzemë brëkòwelë zmieniwny <tt>KDE4_INCLUDES</tt> co trzëmô stegnã do nagłówkòwëch lopków dlô KDE4.


In order to allow the compiler to find these files, we pass that variable to the <tt>include_directories()</tt> function which adds the KDE4 headers to the header search path.
Żebë pòmóc kòmpilatorowi nalézc ne lopczi, dómë nã zmieniwną do fùnkcëji, co dodôwô nagłówczi KDE4 do stegnë szëkaniô za nagłówkama.


Next we create a variable called <tt>tutorial1_SRCS</tt> using the <tt>set()</tt> function. In this case we simply set it to the name of our only source file.
Dali më ùsôdzemë zmieniwną zwóną <tt>tutorial1_SRCS</tt> brëkùjąc fùnkcëji <tt>set()</tt>. W tim przëmiôrze më prosto dómë miono najégò jedurnégò zdrojowégò lopka.


Then we use <tt>kde4_add_executable()</tt> to create an executable called <tt>tutorial1</tt> from the source files listed in our <tt>tutorial1_SRCS</tt> variable. Afterwards, we link our executable to the KDE4 kdeui library using <tt>target_link_libraries()</tt> and the <tt>KDE4_KDEUI_LIBS</tt> variable which was set by the <tt>find_package()</tt> function. The line starting with <tt>install</tt> writes a default "install" target into the Makefile.
Zôs dómë <tt>kde4_add_executable()</tt> abë ùsôdzëc zrëszeniowi lopk pòzwóny <tt>tutorial1</tt> ze zdrojowich lopków wëpisónëch w zmieniwny <tt>tutorial1_SRCS</tt>. Pò temù, zlënkùjemë naji zrëszeniowi lopk do biblioteczi KDE4 kdeui library brëkùjącë <tt>target_link_libraries()</tt> ë zmieniwny <tt>KDE4_KDEUI_LIBS</tt> co ùsôdzonô bëła przez fùnkcëjã <tt>find_package()</tt>. Liniô naczinającô sã <tt>install</tt> zapisëjë domëslny cél "install" w Makefile.


=== Wëkònôj ë zrëszë ===
=== Wëkònôj ë zrëszë ===
Mòżesz rãczno wëwòłac CMake:
Mòżesz rãczno wëwòłac CMake:


mkdir build && cd build
<syntaxhighlight lang="bash">
cmake .. # Bôczë na ne dwa pùnktë - to nie fela, le òdwòłanié do ''katalogù wëżi".
mkdir build && cd build
make
cmake .. # Bôczë na ne dwa pùnktë - to nie fela, le òdwòłanié do ''katalogù wëżi".
make
</syntaxhighlight>


Abò, żlë môsz ùstawioné òkrãżé jak je to òpisóné w [[Getting_Started/Build/KDE4|Getting Started/Build/KDE4]], mòżesz skòmpilowac kòd pòlétã:
Abò, żlë môsz ùstawioné òkrãżé jak je to òpisóné w [[Getting_Started/Build/KDE4|Getting Started/Build/KDE4]], mòżesz skòmpilowac kòd pòlétã:

Latest revision as of 18:29, 15 July 2012

Witôj Swiece
Tutorial Series   Tutorial dlô zaczinającëch
Previous   C++, Qt, KDE4 development environment
What's Next   Tutorial 2 - KXmlGuiWindow
Further Reading   CMake

Abstract

Twòjô pierszô programa mô witac swiat drësznym "Witôj Swiece". Do tegò ùżëjemë KMessageBox ë dodómë swòje nôdpisë do knąpów.

Tip
Bë wëdostac wicy wëdowiédzë ò równojaczi klase z jaką sã pòtkôsz, Konqueror òferëje chùtczé skrodzënë. Téj, żebë òbaczëc jinfòrmacëje ò KMessageBox, wpiszë le "kde.kmessagebox" w Konquerorze a dokùmentacëjô òstónié wëskrzëniónô.


Tip
Mòżesz chcec brëkòwac KDevelop do swòjech projektów. Dofùlowùje òn kòd, ùmòżebniô łatwi przëstãp do przezéraniô dokùmentacëji API ë mô wspiarcé dlô debugòwaniô.

Przeczëtôj nen tutorial abë ùstawic dobrze KDevelop dlô nech dzejaniów. Nôpierwi chcesz sprôwdzëc, czë ùstôwë robią co do nich słëchô òtmëkającë bëtną aplikacëjã KDE 4 w KDevelop.

Równak bãdzesz wcyg mùszôł editowac CMake rãczno..


Kòd

Wszëtczé kòdë jaczich je nót to le jeden lopk: main.cpp. Ùsôdzë gò z kòdã pòdónym niżi:

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

int main (int argc, char *argv[])
{
    KAboutData aboutData(
                         // Miono programë brëkòwóné bùtën.
                         "tutorial1",
                         // Miono katalogù wiadła
                         // Jeżlë ni ma, miono programù mdze brëkòwóné.
                         0,
                         // Miono jaczé sã wëskrzeni.
                         ki18n("Tutorial 1"),
                         // Wersëjô programë.
                         "1.0",
                         // Krótczi òpisrnk co robi aplikacëjô.
                         ki18n("Displays a KMessageBox popup"),
                         // Licencëjô kòdu
                         KAboutData::License_GPL,
                         // Aùtorsczé prawa
                         ki18n("(c) 2007"),
                         // Òptacëjny tekst wëskrzeniony w òknie Ò programie.
                         // Mòże tam bëc co le chcesz...
                         ki18n("Some text..."),
                         // Domôcô starna programë.
                         "http://tutorial.com/",
                         // Adresa e-mail dlô repòrtowaniô felów.
                         "[email protected]");

    KCmdLineArgs::init( argc, argv, &aboutData );
    KApplication app;
    KGuiItem yesButton( i18n( "Hello" ), QString(),
                        i18n( "This is a tooltip" ),
                        i18n( "This is a WhatsThis help text." ) );
    KMessageBox::questionYesNo( 0, i18n( "Hello World" ),
                                i18n( "Hello" ), yesButton );
    return 0;
}

Pierszi, òsoblëwi dlô KDE kòd jaczi chcemë pòznac w ti programie je KAboutData. Na klasa je brëkòwónô do trzëmaniô wëdowiédzë ò programie taczich jak krótczi òpisënk, aùtorowie czë licencëjô. W wikszi dzél programów bãdze zwëskôł z ti klasë.

Dali przeńdzemë do KCmdLineArgs. Na klasa je brëkòwónô do trzëmaniô argùmentów zrëszeniowëch, na przëmiôr, òtmëkaniô editora z lopkã. Równak terô, më zajinicjalizëjëmë ją z òbiektã KAboutData żebë brëkòwac przełączników --version czë --author.

Zôs ùsôdzemë òbiekt KApplication. To mùszi bëc zrobioné le jeden rôz w kòżdi programie, ga je to nót dlô rzeczów taczich jaki18n.

Terô żlë mómë ju zrëchtowóné wszëtczi ùstawë, mòżemë jic dali z barżi jinteresującëma sprawama z nają aplikacëją. Chcemë ùsôdzëc dialogòwi òkno, ale dopasëjemë pòd se jedną z knąpów. Do etgò nót nama mdze òbiekt KGuiItem. Pierszi argùment w kònstruktorze KGuiItem to tekst jaczi wëskrzeni sã w elemence (w naszim przëtrôfkù to knąpa). Téj mómë òptacëjã bë dac ikònã dlô knąpë, ale ga më ji nie chcemë tedr dómë tu QString(). Dali je pòdpòwiesc (to cos co sã wëskrzeni jeżlë najachac na knąpã mëszą) a na kùńcu tekst dlô "Co to je?" (przëstãpné przez klëkniãcé prawą knąpą mëszë albò Shift-F1).

Terô czej momë nasz element, mòżemë ùsôdzëc dialogòwi òkno. Wëwòłamë fùnkcëjã KMessageBox::questionYesNo() co domëslnô wëskrzëniwô òko z knąpama "Jo", "Nié". Drëdżi argùment to tekst jaczi sã pòkaże w tekstowim pòlu nad knąpą. Trzecy to titel òkna a zôs przepiszemë KGuiItem dlô knąpë "Jo" do ùsôdzonégò chùdzy KGuiItem guiItem.

Bôczë, że wszëtczi nôdpisë jaczi bãdą widzawné dlô brëkòwnika są wëwòłóné przez fùnkcëjã i18n(). To je mùsz dlô tegò, bë ne wiadła mògłé bëc przedolmaczoné. Wicy ò dolmaczënkach nalezc mòżesz w ùczbòwnikù pò lokalizowanim.

Në, mómë ju fardich naji kòd. Terô czas na bùdowanié ë sprawdzenié.

Bùdowanié

Chcesz ùżëc CMake dlô zbùdowaniô òkrãżégò. Môsz zrobioné lopk CMakeLists.txt, jaczi wëzwëska cmake do wëgenerowaniô wszëtczich lopków Makefile.

CMakeLists.txt

Ùsôdzë lopk nazwóny CMakeLists.txt w tim katalogù co main.cpp. W lopkù tim mô nalézc so zamkłosc:

project (tutorial1)
find_package(KDE4 REQUIRED)
include (KDE4Defaults)
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})

Fùnkcëjô find_package() szëkô za paczétã jaczi żądôsz (w tim przëmiôrze KDE4) ë ùstawiô niechtërne zmieniwne co òpisëją môl w jaczim nalézc jidze nagówczi i biblioteczi paczétów. Tu mdzemë brëkòwelë zmieniwny KDE4_INCLUDES co trzëmô stegnã do nagłówkòwëch lopków dlô KDE4.

Żebë pòmóc kòmpilatorowi nalézc ne lopczi, dómë nã zmieniwną do fùnkcëji, co dodôwô nagłówczi KDE4 do stegnë szëkaniô za nagłówkama.

Dali më ùsôdzemë zmieniwną zwóną tutorial1_SRCS brëkùjąc fùnkcëji set(). W tim przëmiôrze më prosto dómë miono najégò jedurnégò zdrojowégò lopka.

Zôs dómë kde4_add_executable() abë ùsôdzëc zrëszeniowi lopk pòzwóny tutorial1 ze zdrojowich lopków wëpisónëch w zmieniwny tutorial1_SRCS. Pò temù, zlënkùjemë naji zrëszeniowi lopk do biblioteczi KDE4 kdeui library brëkùjącë target_link_libraries() ë zmieniwny KDE4_KDEUI_LIBS co ùsôdzonô bëła przez fùnkcëjã find_package(). Liniô naczinającô sã install zapisëjë domëslny cél "install" w Makefile.

Wëkònôj ë zrëszë

Mòżesz rãczno wëwòłac CMake:

mkdir build && cd build
cmake .. # Bôczë na ne dwa pùnktë - to nie fela, le òdwòłanié do ''katalogù wëżi".
make

Abò, żlë môsz ùstawioné òkrãżé jak je to òpisóné w Getting Started/Build/KDE4, mòżesz skòmpilowac kòd pòlétã:

cmakekde


Terôzkù zrëszë programã:

./tutorial1

Biéj dali

Terô mòżesz jic dali bë naùczëc so brëkòwaniô KXmlGuiWindow.