Development/Tutorials/First program (ru): Difference between revisions
Shaforostoff (talk | contribs) No edit summary |
No edit summary |
||
(14 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
{{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/ | 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/ | 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/ | В [[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>. Создайте файл с кодом, приведённым ниже: | ||
< | <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", // Имя программы используется для внутренних нужд. | |||
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 ); | |||
} | } | ||
</ | </syntaxhighlight> | ||
Первый KDE код, который был встречен в программе - {{class|KAboutData}}. Это специальный класс для хранения такой информации о программе, как краткое описание, авторы, тип лицензии. Почти каждое (Pretty much) KDE-приложение должно использовать этот класс. | Первый KDE код, который был встречен в программе - {{class|KAboutData}}. Это специальный класс для хранения такой информации о программе, как краткое описание, авторы, тип лицензии. Почти каждое (Pretty much) KDE-приложение должно использовать этот класс. | ||
Line 64: | Line 63: | ||
Затем был использован {{class|KCmdLineArgs}}. Этот класс позволяет задать параметры командной строки, например, чтобы запускать программу с заданным файлом. Однако, в этом туториале мы просто инициализировали этот класс с помощью созданного объекта {{class|KAboutData}}. Так что можно использовать параметры командной строки <tt>--version</tt> or <tt>--author</tt>. | Затем был использован {{class|KCmdLineArgs}}. Этот класс позволяет задать параметры командной строки, например, чтобы запускать программу с заданным файлом. Однако, в этом туториале мы просто инициализировали этот класс с помощью созданного объекта {{class|KAboutData}}. Так что можно использовать параметры командной строки <tt>--version</tt> or <tt>--author</tt>. | ||
В строке 13 был создан объект {{class|KApplication}}. | В строке 13 был создан объект {{class|KApplication}}. Он нужен для таких вещей, как [[Development/Tutorials/Localization/i18n|поддержка перевода программ на другие языки]]. | ||
Теперь, когда все требуемые начальные действия относящиеся к KDE выполнены, можно перейти к созданию интересных вещей для нашего приложения. Мы собираемся сделать всплывающее окно (popup box), кроме того, мы изменим одну из кнопок. Чтобы это сделать, нужен объект {{class|KGuiItem}}. Первый аргумент в конструкторе {{class|KGuiItem}} - текст, который отображается на элементе (в нашем случае - кнопке). Следующий параметр - значок для кнопки, но нам это не нужно, поэтому мы опускаем его, написав <tt>QString()</tt>. Наконец, мы задаём текст всплывающей подсказки (который появляется при наведении курсора на элемент) и текст для "What's This(Что это такое)?" (доступно через правый щелчок мышью или же Shift-F1) | Теперь, когда все требуемые начальные действия относящиеся к KDE выполнены, можно перейти к созданию интересных вещей для нашего приложения. Мы собираемся сделать всплывающее окно (popup box), кроме того, мы изменим одну из кнопок. Чтобы это сделать, нужен объект {{class|KGuiItem}}. Первый аргумент в конструкторе {{class|KGuiItem}} - текст, который отображается на элементе (в нашем случае - кнопке). Следующий параметр - значок для кнопки, но нам это не нужно, поэтому мы опускаем его, написав <tt>QString()</tt>. Наконец, мы задаём текст всплывающей подсказки (который появляется при наведении курсора на элемент) и текст для "What's This(Что это такое)?" (доступно через правый щелчок мышью или же Shift-F1) | ||
Line 74: | Line 73: | ||
==Сборка== | ==Сборка== | ||
Если системное окружение было | Если системное окружение было настроено так, как описано в [[Getting Started/Build/KDE4_(ru)]], то код можно скомпилировать так: | ||
g++ main.cpp -o tutorial1 \ | |||
-I | -I$QTDIR/include/Qt \ | ||
-I | -I$QTDIR/include/QtCore \ | ||
-I | -I$QTDIR/include \ | ||
-I | -I$KDEDIR/include/KDE \ | ||
-I | -I$KDEDIR/include \ | ||
-L | -L$KDEDIR/lib \ | ||
-L | -L$QTDIR/lib -lQtCore -lQtGui -lkdeui -lkdecore | ||
А затем запустить с помощью | А затем запустить с помощью | ||
dbus-launch ./tutorial1 | dbus-launch ./tutorial1 | ||
Line 92: | Line 91: | ||
====CMakeLists.txt==== | ====CMakeLists.txt==== | ||
Создайте файл с именем CMakeLists.txt со следующим содержанием в той же директории, что и main.cpp | Создайте файл с именем CMakeLists.txt со следующим содержанием в той же директории, что и main.cpp | ||
< | <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}) | ||
</ | </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]], данный исходный код можно скомпилировать с помощью | ||
cmakekde | cmakekde | ||
Если нет, то: | |||
mkdir build | |||
cmake .. && make | |||
И запустить | И запустить | ||
./tutorial1.shell | ./tutorial1.shell | ||
==Продолжим изучение== | ==Продолжим изучение== | ||
Теперь можно перейти к [[Development/Tutorials/ | Теперь можно перейти к [[Development/Tutorials/Using_KXmlGuiWindow_(ru)|статье о KXmlGuiWindow]]. | ||
[[Category:C++]] | [[Category:C++]] |
Latest revision as of 09:19, 14 July 2012
Tutorial Series | Beginner Tutorial |
Previous | C++, Qt, Сборка и настройка KDE4 |
What's Next | Урок 2 - KXmlGuiWindow |
Further Reading | CMake |
Введение
Первая программа приветствует мир дружелюбным "Hello World". Для этого будет использован KMessageBox с изменением одной из кнопок.
В этом документе описывается настройка 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.