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

    From KDE TechBase
    mNo edit summary
    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/Using_KXmlGuiWindow|Tutorial 2 - KXmlGuiWindow]]|  
    next=[[Development/Tutorials/Using_KXmlGuiWindow|Урок 2 - KXmlGuiWindow]]|  


    reading=[[Development/Tutorials/CMake|CMake]]
    reading=[[Development/Tutorials/CMake|CMake]]

    Revision as of 13:28, 31 July 2007


    Development/Tutorials/First_program

    Hello World
    Tutorial Series   Beginner Tutorial
    Previous   C++, Qt, KDE4 development environment
    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. Создайте файл с кодом, приведённым ниже:

    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. Он нужен для таких вещей, как поддержка перевода программ на другие языки.

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

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

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

    Сборка

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

    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/Unstable_Version, данный исходный код можно скомпилировать с помощью

    cmakekde
    

    И запустить

    ./tutorial1.shell
    

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

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