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

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


Line 6: Line 6:
name=Hello World|
name=Hello World|


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_(ru)|Сборка и настройка KDE4]]|


next=[[Development/Tutorials/Using_KXmlGuiWindow|Tutorial 2 - KXmlGuiWindow]]|  
next=[[Development/Tutorials/Using_KXmlGuiWindow_%28ru%29|Урок 2 - KXmlGuiWindow]]|  


reading=[[Development/Tutorials/CMake|CMake]]
reading=[[Development/Tutorials/CMake|CMake]]
Line 22: Line 22:
Для работы с проектами можно использовать KDevelop, имеющий такие функции, как дополнение кода, лёгкий доступ к документации по API или поддержка отладки, удобство которых вы обязательно оцените после получения минимального опыта программирования.
Для работы с проектами можно использовать KDevelop, имеющий такие функции, как дополнение кода, лёгкий доступ к документации по API или поддержка отладки, удобство которых вы обязательно оцените после получения минимального опыта программирования.


В [[Getting_Started/Set_up_KDE_4_for_development#KDevelop|этом документе]] описывается настройка KDevelop для данной задачи. Проверить, работают ли настройки, можно попробовав открыть проект существующего приложения KDE4 с помощью KDevelop.
В [[Getting_Started/Set_up_KDE_4_for_development_(ru)#KDevelop|этом документе]] описывается настройка KDevelop для данной задачи. Проверить, работают ли настройки, можно попробовав открыть проект существующего приложения KDE4 с помощью KDevelop.


Тем не менее, файлы CMake по-прежнему нужно редактировать вручную.
Тем не менее, файлы CMake по-прежнему нужно редактировать вручную.
Line 29: Line 29:
==Код==
==Код==
Весь необходимый код находится в <tt>main.cpp</tt>. Создайте файл с кодом, приведённым ниже:
Весь необходимый код находится в <tt>main.cpp</tt>. Создайте файл с кодом, приведённым ниже:
<code cppqt>
<syntaxhighlight lang="cpp-qt">
#include <QString>
#include <QString>
#include <KApplication>
#include <KApplication>
Line 39: Line 39:
int main (int argc, char *argv[])
int main (int argc, char *argv[])
{
{
        KAboutData aboutData("tutorial1",                       // Имя программы используется для внутренних нужд.
    KAboutData aboutData("tutorial1",                 // Имя программы используется для внутренних нужд.
                        0,                                     // Имя директории с сообщением (The message catalog name), используется имя программы, если 0.
                        0,                           // Имя директории с сообщением (The message catalog name), используется имя программы, если 0.
                        ki18n("Tutorial 1"),                   // Отображаемое имя программы.
                        ki18n("Tutorial 1"),         // Отображаемое имя программы.
                        "1.0",                                 // Строка с информацией о версии программы.
                        "1.0",                       // Строка с информацией о версии программы.
                        ki18n("KMessageBox popup"),             // Краткое описание того, что делает программа.
                        ki18n("KMessageBox popup"),   // Краткое описание того, что делает программа.
                        KAboutData::License_GPL,               // Тип лицензии.
                        KAboutData::License_GPL,     // Тип лицензии.
                        ki18n("(c) 2007"),                     // Заявление об авторском праве.
                        ki18n("(c) 2007"),           // Заявление об авторском праве.
                        ki18n("Some text..."),                 // Произвольный текст, содержащий информацию любого рода.
                        ki18n("Some text..."),       // Произвольный текст, содержащий информацию любого рода.
 
                        "http://tutorial.com",       // Адрес домашней страницы программы
                        "http://tutorial.com",                 // Адрес домашней страницы программы
                        "[email protected]");       // Строка с адресом электронной почты для сообщений об ошибках.
                        "[email protected]");                 // Строка с адресом электронной почты для сообщений об ошибках.


        KCmdLineArgs::init( argc, argv, &aboutData );
    KCmdLineArgs::init( argc, argv, &aboutData );
        KApplication app;
    KApplication app;
        KGuiItem guiItem( QString( "Hello" ), QString(),
    KGuiItem guiItem( QString( "Hello" ), QString(),
                            QString( "this is a tooltip" ),
                      QString( "this is a tooltip" ),
                            QString( "this is a whatsthis" ) );
                      QString( "this is a whatsthis" ) );
        KMessageBox::questionYesNo( 0, "Hello World", "Hello", guiItem );
    KMessageBox::questionYesNo( 0, "Hello World", "Hello", guiItem );
}
}
</code>
</syntaxhighlight>


Первый KDE код, который был встречен в программе - {{class|KAboutData}}. Это специальный класс для хранения такой информации о программе, как краткое описание, авторы, тип лицензии. Почти каждое (Pretty much) KDE-приложение должно использовать этот класс.
Первый KDE код, который был встречен в программе - {{class|KAboutData}}. Это специальный класс для хранения такой информации о программе, как краткое описание, авторы, тип лицензии. Почти каждое (Pretty much) KDE-приложение должно использовать этот класс.
Line 74: Line 73:


==Сборка==
==Сборка==
Если системное окружение было настроена так, как описано в [[Getting_Started/Build/KDE4|Getting_Started/Build/Unstable_Version]], то код можно скомпилировать  так:
Если системное окружение было настроено так, как описано в [[Getting Started/Build/KDE4_(ru)]], то код можно скомпилировать  так:
   
   
  g++ main.cpp -o tutorial1 \
  g++ main.cpp -o tutorial1 \
Line 92: Line 91:
====CMakeLists.txt====
====CMakeLists.txt====
Создайте файл с именем CMakeLists.txt со следующим содержанием в той же директории, что и main.cpp  
Создайте файл с именем CMakeLists.txt со следующим содержанием в той же директории, что и main.cpp  
<code>
<syntaxhighlight lang="text">
project (tutorial1)
project (tutorial1)


Line 102: Line 101:
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})
</code>
</syntaxhighlight>


Функция <tt>find_package()</tt> находит заданный пакет (в данном случае KDE4) и устанавливает определённые переменные, описывающие расположение заголовков и библиотек пакета. В данном примере использована переменная <tt>KDE4_INCLUDES</tt>, которая содержит путь к заголовочным файлам KDE4.
Функция <tt>find_package()</tt> находит заданный пакет (в данном случае KDE4) и устанавливает определённые переменные, описывающие расположение заголовков и библиотек пакета. В данном примере использована переменная <tt>KDE4_INCLUDES</tt>, которая содержит путь к заголовочным файлам KDE4.
Line 113: Line 112:


====Выполнение сборки и запуск (Make and Run)====
====Выполнение сборки и запуск (Make and Run)====
Опять же, если системное окружение было установлено так, как описано в [[Getting_Started/Build/KDE4|Getting_Started/Build/Unstable_Version]], данный исходный код можно скомпилировать  с помощью
Опять же, если системное окружение было установлено так, как описано в [[Getting Started/Build/KDE4]], данный исходный код можно скомпилировать  с помощью
  cmakekde
  cmakekde
Если нет, то:
mkdir build
cmake .. && make


И запустить
И запустить
Line 120: Line 124:


==Продолжим изучение==
==Продолжим изучение==
Теперь можно перейти к [[Development/Tutorials/Using_KXmlGuiWindow|статье о KXmlGuiWindow]].
Теперь можно перейти к [[Development/Tutorials/Using_KXmlGuiWindow_(ru)|статье о KXmlGuiWindow]].


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

Latest revision as of 09:19, 14 July 2012

Hello World
Tutorial Series   Beginner Tutorial
Previous   C++, Qt, Сборка и настройка KDE4
What's Next   Урок 2 - KXmlGuiWindow
Further Reading   CMake

Введение

Первая программа приветствует мир дружелюбным "Hello World". Для этого будет использован KMessageBox с изменением одной из кнопок.

Tip
Для получения большей информации о каком-либо классе, с которым вы работаете, Konqueror предоставляет возможность быстрого вызова справки. Таким образом, чтобы посмотреть информацию о KMessageBox, просто введите "kde:kmessagebox" в Konqueror, и будет открыта документация.


Tip
Для работы с проектами можно использовать KDevelop, имеющий такие функции, как дополнение кода, лёгкий доступ к документации по API или поддержка отладки, удобство которых вы обязательно оцените после получения минимального опыта программирования.

В этом документе описывается настройка KDevelop для данной задачи. Проверить, работают ли настройки, можно попробовав открыть проект существующего приложения KDE4 с помощью KDevelop.

Тем не менее, файлы CMake по-прежнему нужно редактировать вручную.


Код

Весь необходимый код находится в main.cpp. Создайте файл с кодом, приведённым ниже:

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

int main (int argc, char *argv[])
{
    KAboutData aboutData("tutorial1",                  // Имя программы используется для внутренних нужд.
                         0,                            // Имя директории с сообщением (The message catalog name), используется имя программы, если 0.
                         ki18n("Tutorial 1"),          // Отображаемое имя программы.
                         "1.0",                        // Строка с информацией о версии программы.
                         ki18n("KMessageBox popup"),   // Краткое описание того, что делает программа.
                         KAboutData::License_GPL,      // Тип лицензии.
                         ki18n("(c) 2007"),            // Заявление об авторском праве.
                         ki18n("Some text..."),        // Произвольный текст, содержащий информацию любого рода.
                         "http://tutorial.com",        // Адрес домашней страницы программы
                         "[email protected]");       // Строка с адресом электронной почты для сообщений об ошибках.

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

Первый KDE код, который был встречен в программе - KAboutData. Это специальный класс для хранения такой информации о программе, как краткое описание, авторы, тип лицензии. Почти каждое (Pretty much) KDE-приложение должно использовать этот класс.

Затем был использован KCmdLineArgs. Этот класс позволяет задать параметры командной строки, например, чтобы запускать программу с заданным файлом. Однако, в этом туториале мы просто инициализировали этот класс с помощью созданного объекта KAboutData. Так что можно использовать параметры командной строки --version or --author.

В строке 13 был создан объект KApplication. Он нужен для таких вещей, как поддержка перевода программ на другие языки.

Теперь, когда все требуемые начальные действия относящиеся к KDE выполнены, можно перейти к созданию интересных вещей для нашего приложения. Мы собираемся сделать всплывающее окно (popup box), кроме того, мы изменим одну из кнопок. Чтобы это сделать, нужен объект KGuiItem. Первый аргумент в конструкторе KGuiItem - текст, который отображается на элементе (в нашем случае - кнопке). Следующий параметр - значок для кнопки, но нам это не нужно, поэтому мы опускаем его, написав QString(). Наконец, мы задаём текст всплывающей подсказки (который появляется при наведении курсора на элемент) и текст для "What's This(Что это такое)?" (доступно через правый щелчок мышью или же Shift-F1)

Теперь элемент настроен, и мы можем создать всплывающее окно (popup). Для этого вызывается функция KMessageBox::questionYesNo(), которая по умолчанию создаёт MessageBox с кнопками "Да", "Нет". Второй аргумент - текст, который будет выведен посередине диалогового окна. Третий - заголовок, который будет задан для окна и, наконец, мы используем KGuiItem (что будет нормально работать) для кнопки "Да" в KGuiItem guiItem, который нами создан.

Теперь, когда мы закончили ознакомление с кодом, время собрать и запустить наше приложение.

Сборка

Если системное окружение было настроено так, как описано в Getting Started/Build/KDE4_(ru), то код можно скомпилировать так:

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

А затем запустить с помощью

dbus-launch ./tutorial1

Использование CMake

Процесс сборки автоматизируется с помощью CMake. Он самостоятельно определяет расположение библиотек и заголовочных файлов KDE, Qt и др. Использование CMake упрощает сборку приложения на другом компьютере.

CMakeLists.txt

Создайте файл с именем CMakeLists.txt со следующим содержанием в той же директории, что и main.cpp

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() находит заданный пакет (в данном случае KDE4) и устанавливает определённые переменные, описывающие расположение заголовков и библиотек пакета. В данном примере использована переменная KDE4_INCLUDES, которая содержит путь к заголовочным файлам KDE4.

Чтобы компилятор нашёл эти файлы, нужно передать эту переменную функции include_directories(), которая добавит директорию с заголовками KDE4 в поиск (search path).

Далее была создана переменная tutorial1_SRCS, инициализированная с помощью функции set(). В данном случае, ей было просто задано имя исходного файла.

Затем была использована функция kde4_add_executable(), чтобы создать исполняемый файл tutorial1 из исходных файлов, перечисленных в переменной tutorial1_SRCS. Наконец, указывается библиотека KDE4 kdeui для линковки с файлом с помощью target_link_libraries() и переменной KDE4_KDEUI_LIBS, заданной с помощью функции find_package().

Выполнение сборки и запуск (Make and Run)

Опять же, если системное окружение было установлено так, как описано в Getting Started/Build/KDE4, данный исходный код можно скомпилировать с помощью

cmakekde

Если нет, то:

mkdir build
cmake .. && make

И запустить

./tutorial1.shell

Продолжим изучение

Теперь можно перейти к статье о KXmlGuiWindow.