Development/Tutorials/First program (ru)

From KDE TechBase
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


Development/Tutorials/First_program

Hello World
Tutorial Series   Beginner Tutorial
Previous   C++, Qt, KDE4 development environment
What's Next   Tutorial 2 - KXmlGuiWindow
Further Reading   CMake

Введение

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

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


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

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

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


Код

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

  1. include <QString>
  2. include <KApplication>
  3. include <KAboutData>
  4. include <KMessageBox>
  5. include <KCmdLineArgs>
  6. 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. Это нужно обязательно делать 1 раз c тех пор, как это нужно для таких вещей, как i18n.

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

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

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

Сборка

Если системное окружение было настроена так, как описано в Getting_Started/Build/Unstable_Version, то код можно скомпилировать так:

gcc main.cpp -o tutorial1 \
-I/home/kde-devel/qt-copy/include/Qt \
-I/home/kde-devel/qt-copy/include/QtCore \
-I/home/kde-devel/qt-copy/include \
-I/home/kde-devel/kde/include/KDE \
-I/home/kde-devel/kde/include \
-L/home/kde-devel/kde/lib \
-L/home/kde-devel/qt-copy/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/Unstable_Version, данный исходный код можно скомпилировать с помощью

cmakekde

И запустить

./tutorial1.shell


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

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