<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF108%3AKDE4</id>
		<title>LXF108:KDE4 - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF108%3AKDE4"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF108:KDE4&amp;action=history"/>
		<updated>2026-05-13T04:54:48Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF108:KDE4&amp;diff=8535&amp;oldid=prev</id>
		<title>Yaleks в 15:35, 24 августа 2009</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF108:KDE4&amp;diff=8535&amp;oldid=prev"/>
				<updated>2009-08-24T15:35:49Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki.linuxformat.ru/wiki/index.php?title=LXF108:KDE4&amp;amp;diff=8535&amp;amp;oldid=8530&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF108:KDE4&amp;diff=8530&amp;oldid=prev</id>
		<title>Yaleks: Новая: {{Цикл/KDE4}} == KDE 4 под микроскопом == : ''ЧАСТЬ 1 Считаете, что для KDE 4 мало приложений? В ваших силах исправи...</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF108:KDE4&amp;diff=8530&amp;oldid=prev"/>
				<updated>2009-08-24T14:11:31Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: {{Цикл/KDE4}} == KDE 4 под микроскопом == : &amp;#039;&amp;#039;ЧАСТЬ 1 Считаете, что для KDE 4 мало приложений? В ваших силах исправи...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Цикл/KDE4}}&lt;br /&gt;
== KDE 4 под микроскопом ==&lt;br /&gt;
: ''ЧАСТЬ 1 Считаете, что для KDE 4 мало приложений? В ваших силах исправить ситуацию – благодаря новой серии учебников от '''Андрея Боровского'''!''&lt;br /&gt;
&lt;br /&gt;
Два года назад LXF публиковал цикл статей о программиро-&lt;br /&gt;
вании для KDE 3 (LXF81–85). Тогда это был зрелый рабо-&lt;br /&gt;
чий стол, который готовился уступить место KDE 4, и писать&lt;br /&gt;
о нем было легко, не не слишком интересно. Легко – поскольку KDE&lt;br /&gt;
3 на тот момент был хорошо (даже очень хорошо) документирован,&lt;br /&gt;
а также потому, что существовало много примеров (в том числе&lt;br /&gt;
написанных мною самим). С другой стороны, было понятно, что&lt;br /&gt;
цикл разработки KDE 3 практически завершен, и в статьях о нем не&lt;br /&gt;
удастся отразить живые моменты рождения новых технологий.&lt;br /&gt;
&lt;br /&gt;
С KDE 4 все обстоит иначе. Его первый стабильный релиз поя-&lt;br /&gt;
вился в начале этого года, и сейчас KDE 4 активно развивается.&lt;br /&gt;
Далеко не все идеи разработчиков получили окончательное вопло-&lt;br /&gt;
щение; по-видимому, и сам список технологий, используемых в&lt;br /&gt;
KDE 4, будет со временем меняться – я, например, не уверен, что&lt;br /&gt;
система Decibel, о которой будет сказано ниже, войдет в последую-&lt;br /&gt;
щие релизы. Что же касается документации и примеров, то стоит&lt;br /&gt;
ли говорить, что для многих частей KDE 4 и то, и другое существует&lt;br /&gt;
либо в зачаточной стадии, либо вовсе отсутствует. Именно поэтому&lt;br /&gt;
писать о KDE 4 гораздо интереснее. У нас есть возможность про-&lt;br /&gt;
следить глазами программиста рождение нового рабочего стола, с&lt;br /&gt;
которым пользователи Linux будут жить несколько ближайших лет.&lt;br /&gt;
Как и в случае с Qt 4, мы будем предполагать, что вы уже знакомы&lt;br /&gt;
с разработкой для KDE 3. На всякий случай, уроки в формате PDF&lt;br /&gt;
есть на DVD этого номера.&lt;br /&gt;
&lt;br /&gt;
=== А внутри у ней плазма ===&lt;br /&gt;
Библиотеки Qt 4.x во многом революционны, и было бы странно,&lt;br /&gt;
если бы разработчики KDE 4 не подхватили этот «трудовой порыв».&lt;br /&gt;
На внешних красотах KDE 4, усиленных мощью 3D-ускорителей, мы&lt;br /&gt;
останавливаться не будем, а скорее поднимем капот (или снимем&lt;br /&gt;
кожух?) и посмотрим, что же находится внутри. Один из важней-&lt;br /&gt;
ших элементов KDE, который сразу бросается в глаза (в нескольких&lt;br /&gt;
смыслах слова) – это Plasma. С точки зрения программиста, она –&lt;br /&gt;
развитие Qt Graphics View Framework (LXF105). Система Corona рас-&lt;br /&gt;
ширяет возможности QGraphicsScene, добавляя концепцию аппле-&lt;br /&gt;
тов. В результате с элементами графической сцены (т.е. рабочего&lt;br /&gt;
стола) можно связывать мини-приложения. Изначально разработ-&lt;br /&gt;
чики Plasma ориентировались на Qt 4.2, в которой, напомню, еще не&lt;br /&gt;
было встраиваемых виджетов; в результате пришлось придумывать&lt;br /&gt;
аналогичный механизм для внедрения пиктограмм и кнопок. Теперь,&lt;br /&gt;
когда данный функционал появился в самой Qt, можно ожидать&lt;br /&gt;
более широкого использования встраиваемых виджетов в будущих&lt;br /&gt;
версиях Plasma.&lt;br /&gt;
&lt;br /&gt;
Минуя другие состояния вещества, перейдем от Plasma к тех-&lt;br /&gt;
нологии Solid. Это – кросс-платформенная подсистема, предна-&lt;br /&gt;
значенная для работы с устройствами. Правда, Solid не позволяет&lt;br /&gt;
KDE-приложениям управлять ими, но предоставляет достаточно&lt;br /&gt;
информации, чтобы программа могла подобрать нужные админи-&lt;br /&gt;
стративные средства самостоятельно.&lt;br /&gt;
&lt;br /&gt;
Еще одна интересная и пока что довольно загадочная новинка&lt;br /&gt;
KDE 4 – Phonon. Это переносимая мультимедиа-подсистема, постав-&lt;br /&gt;
ляемая с Qt начиная с версии 4.4. API Phonon состоит из классов&lt;br /&gt;
высокого уровня, которые унифицируют доступ к различным библи-&lt;br /&gt;
отекам, связанным с мультимедиа. Судя по документации (которая&lt;br /&gt;
на момент написания статьи была еще не завершена), важную роль&lt;br /&gt;
в Phonon играют концепция прозрачного доступа к мультимедиа-&lt;br /&gt;
ресурсам, независимо от того, где они расположены, и унаследо-&lt;br /&gt;
ванная от Qt система «модель-контроллер-вид».&lt;br /&gt;
&lt;br /&gt;
Технология под названием Decibel должна упростить жизнь раз-&lt;br /&gt;
работчикам IP-телефонов, видеофонов, чатов и т.п. Она написана&lt;br /&gt;
с использованием чистого Qt 4 (т.е. не зависит от KDE), включает&lt;br /&gt;
в себя реализацию Telepathy и многих других полезных вещей, но,&lt;br /&gt;
судя по сайту проекта (decibel.kde.org), работа над ним застопори-&lt;br /&gt;
лась примерно год назад. Текущая версия – 0.5, что будет даль-&lt;br /&gt;
ше – посмотрим.&lt;br /&gt;
&lt;br /&gt;
=== Инструменты разработчика ===&lt;br /&gt;
Чтобы программировать для KDE 4, нам, конечно, понадобится сама&lt;br /&gt;
среда. Проще всего воспользоваться дистрибутивом, в котором KDE&lt;br /&gt;
4 доступен по умолчанию, но и тут могут возникнуть неожиданные&lt;br /&gt;
проблемы. Например, в «живом» OpenSUSE 11.0 KDE Four Live с&lt;br /&gt;
KDE 4.1 Beta2 обнаружилась одна серьезная и надоедливая ошиб-&lt;br /&gt;
ка – любое приложение KDE 4, выводящее стандартное диалоговое&lt;br /&gt;
окно, вызывает фатальный сбой в KNotify (о чем тут же сообщает&lt;br /&gt;
еще один диалог). Поэтому нам придется довольствоваться KDE&lt;br /&gt;
4.04, входящим в состав OpenSUSE 11.0. Помимо собственно гра-&lt;br /&gt;
фической среды, нам, разумеется, понадобятся пакеты разработчи-&lt;br /&gt;
ка Qt 4.x и KDE 4.x.&lt;br /&gt;
&lt;br /&gt;
На момент написания этой статьи стабильного KDevelop 4 еще не&lt;br /&gt;
существовало, а нестабильный работал только с тестовой версией&lt;br /&gt;
KDE 4.1, от использования которой мы с вами отказались. В Сети&lt;br /&gt;
можно найти трюки, с помощью которых можно создавать прило-&lt;br /&gt;
жения KDE 4 в KDevelop 3.x, но мы на них останавливаться не будем:&lt;br /&gt;
думаю, что KDevelop 4 уже скоро обретет стабильность, и данные&lt;br /&gt;
советы морально устареют. Лучше потратим сэкономленную жур-&lt;br /&gt;
нальную площадь на KDevelop 4, когда он выйдет. Пока же будем&lt;br /&gt;
применять инструменты низкого уровня: это позволит нам глубже&lt;br /&gt;
проникнуть в суть вещей в KDE 4. Не считая стандартных инструмен-&lt;br /&gt;
тов разработчика, нам понадобятся две консольные утилиты: cmake&lt;br /&gt;
и kapptemplate – мастер, с вызова которого и начинается процесс&lt;br /&gt;
разработки. Kapptemplate создает заготовки для простого прило-&lt;br /&gt;
жения KDE, приложения KDE со сложным главным окном или KPart.&lt;br /&gt;
&lt;br /&gt;
Далее утилита просит указать имя и расположение нового проекта.&lt;br /&gt;
Программа также захочет «познакомиться» – узнать ваши имя и&lt;br /&gt;
e-mail. В этом смысле kapptemplate отличается крайней навязчиво-&lt;br /&gt;
стью и задает личные вопросы при каждом запуске.&lt;br /&gt;
&lt;br /&gt;
Директория, в которой kapptemplate сохраняет файлы заготов-&lt;br /&gt;
ки программы, содержит много интересного (об этом – чуть поз-&lt;br /&gt;
же), но в ней отсутствуют Make-файл и сценарий configure, то есть&lt;br /&gt;
те скрипты, которые мы привыкли использовать для сборки про-&lt;br /&gt;
грамм KDE 3. Здесь нам на помощь приходит CMake. Этот кросс-&lt;br /&gt;
платформенный независимый инструмент от компании Kitware&lt;br /&gt;
стал частью инструментария KDE 4 совсем недавно. Утилита cmake&lt;br /&gt;
выполняет для проектов KDE (и не только KDE) ту же работу, что&lt;br /&gt;
qmake для Qt – т.е. создает Make-файл проекта. Cmake вызывает&lt;br /&gt;
qmake по ходу процесса, и вы должны убедиться, что утилита с&lt;br /&gt;
таким именем в вашей системе относится к Qt 4, а не 3.x. Для этого&lt;br /&gt;
наберите в окне консоли:&lt;br /&gt;
 qmake --version&lt;br /&gt;
Если qmake «не тот», ситуацию следует исправить с помощью&lt;br /&gt;
переменной PATH. В самом простом случае (который мы и рассма-&lt;br /&gt;
триваем) для генерации Make-файлов для проекта KDE 4 достаточно&lt;br /&gt;
скомандовать&lt;br /&gt;
 cmake &amp;lt;project_path&amp;gt;&lt;br /&gt;
где project_path – это путь к проекту. Имейте в виду, что cmake соз-&lt;br /&gt;
дает выходные файлы, в том числе и Makefile, не в project_path, а&lt;br /&gt;
в той директории, откуда он был вызван. Теперь, наконец, можно&lt;br /&gt;
скомандовать&lt;br /&gt;
 make&lt;br /&gt;
и насладиться окном нашего первого приложения KDE 4 (рис. 1). Что&lt;br /&gt;
же это за зверь такой, сурово указывающий на несвежесть файлов&lt;br /&gt;
проекта?&lt;br /&gt;
&lt;br /&gt;
=== Через увеличительное стекло ===&lt;br /&gt;
Если ваша программа называется kapp4, то объявление класса глав-&lt;br /&gt;
ного окна содержится в файле kapp4.h (а его методы – в kapp4.&lt;br /&gt;
cpp). Класс, реализующий центральный элемент главного окна –&lt;br /&gt;
KApp4View – располагается в файлах kapp4view.h/kapp4view.cpp и насле-&lt;br /&gt;
дует от Ui::kapp4view_base, объявление которого (файл ui_ kapp4view_&lt;br /&gt;
base.h) генерируется автоматически на основе описания интерфейса&lt;br /&gt;
программы, содержащегося в kapp4view_base.ui. В этой структуре&lt;br /&gt;
нельзя не заметить влияния Qt 4.x, и (как вы, наверное, уже дога-&lt;br /&gt;
дались) класс kapp4view_base.ui не является потомком QWidget, но&lt;br /&gt;
содержит инструкции, позволяющие настроить таковой (LXF104).&lt;br /&gt;
Помимо kapp4view_base.ui, в нашем проекте есть еще один ui-файл –&lt;br /&gt;
prefs_base.ui, который содержит описание интерфейса окна настроек.&lt;br /&gt;
Забегая вперед, отмечу, что в KDE 4 вы «бесплатно» получаете мощную&lt;br /&gt;
систему конфигурации приложения пользователем (правда, все равно&lt;br /&gt;
уступающую таковой в программе-часах из LXF106).&lt;br /&gt;
&lt;br /&gt;
Вы, наверное, уже озадачились вопросом: как редактировать&lt;br /&gt;
ui-файлы, если KDevelop отсутствует? Отвечаем: для визуального&lt;br /&gt;
проектирования интерфейса можно воспользоваться редактором Qt&lt;br /&gt;
Designer 4.x – он поддерживает и виджеты KDE 4. Файлы settings.h&lt;br /&gt;
и settings.cpp содержат, соответственно, объявление и определение&lt;br /&gt;
класса Settings. Он наследует от KConfigSkeleton и является осно-&lt;br /&gt;
вой движка настройки нашего приложения. Наконец, файл main.cpp,&lt;br /&gt;
как нетрудно догадаться, предоставляет функцию main() нашей&lt;br /&gt;
программы.&lt;br /&gt;
&lt;br /&gt;
При анализе исходных текстов мы будем двигаться сверху вниз,&lt;br /&gt;
т.е. от main() к различным классам. Если отбросить ненужные нам&lt;br /&gt;
в настоящий момент элементы, то функцию main() можно свести к&lt;br /&gt;
следующей схеме:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;int main(int argc, char **argv) {&lt;br /&gt;
KApplication app;&lt;br /&gt;
KApp4 *widget = new KApp4;&lt;br /&gt;
widget-&amp;gt;show();&lt;br /&gt;
return app.exec();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
Класс KApp4 реализует главное окно нашего приложения. Мы&lt;br /&gt;
не сообщаем объекту app класса KApplication, что widget указывает&lt;br /&gt;
на главный визуальный объект программы. Рассмотрим объявление&lt;br /&gt;
Kapp4 подробнее:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;class KApp4 : public KXmlGuiWindow&lt;br /&gt;
{&lt;br /&gt;
Q_OBJECT&lt;br /&gt;
public:&lt;br /&gt;
/**&lt;br /&gt;
* Default Constructor&lt;br /&gt;
*/&lt;br /&gt;
KApp4();&lt;br /&gt;
/**&lt;br /&gt;
* Default Destructor&lt;br /&gt;
*/&lt;br /&gt;
virtual ~KApp4();&lt;br /&gt;
private slots:&lt;br /&gt;
void fileNew();&lt;br /&gt;
void optionsPreferences();&lt;br /&gt;
private:&lt;br /&gt;
void setupActions();&lt;br /&gt;
private:&lt;br /&gt;
Ui::prefs_base ui_prefs_base ;&lt;br /&gt;
KApp4View *m_view;&lt;br /&gt;
QPrinter *m_printer;&lt;br /&gt;
KToggleAction *m_toolbarAction;&lt;br /&gt;
KToggleAction *m_statusbarAction;&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Класс главного окна является потомком KXmlGuiWindow,&lt;br /&gt;
который происходит от класса KMainWindow, наследующего от&lt;br /&gt;
QMainWindow, наряду с KXmlGuiBuilder и KXmlGuiClient. Ниже при-&lt;br /&gt;
водится листинг конструктора класса главного окна&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;KApp4::KApp4()&lt;br /&gt;
: KXmlGuiWindow(), m_view(new KApp4View(this)), m_printer(0) {&lt;br /&gt;
// accept dnd&lt;br /&gt;
setAcceptDrops(true);&lt;br /&gt;
// tell the KXmlGuiWindow that this is indeed the main widget&lt;br /&gt;
setCentralWidget(m_view);&lt;br /&gt;
// then, setup our actions&lt;br /&gt;
setupActions();&lt;br /&gt;
// add a status bar&lt;br /&gt;
statusBar()-&amp;gt;show();&lt;br /&gt;
// a call to KXmlGuiWindow::setupGUI() populates the GUI&lt;br /&gt;
// with actions, using KXMLGUI.&lt;br /&gt;
// It also applies the saved mainwindow settings, if any, and ask the&lt;br /&gt;
// mainwindow to automatically save settings if changed: window size,&lt;br /&gt;
// toolbar position, icon size, etc.&lt;br /&gt;
setupGUI();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
Я специально не стал убирать из листинга комментарии, добав-&lt;br /&gt;
ленные в него программой-генератором, чтобы показать, что&lt;br /&gt;
файлы-заготовки, созданные kapptemplate, не только освобождают нас от рутинной работы, но и сообщают полезную для новичков&lt;br /&gt;
информацию о том, что делают вызываемые функции. Для настрой-&lt;br /&gt;
ки внешнего вида главного окна, как и в KDE 3, используется систе-&lt;br /&gt;
ма KXMLGUI. Напомню, что главное окно хранит данные о меню,&lt;br /&gt;
панелях инструментов и командах в файлах *ui.rc, имеющих формат&lt;br /&gt;
XML. Для нашего приложения тоже был создан такой – это kapp4ui.&lt;br /&gt;
rc, расположенный в той же директории, что и исполняемый файл.&lt;br /&gt;
Тем не менее, при каждом запуске программы на консоль будет&lt;br /&gt;
выводиться сообщение о том, что файл kapp4ui.rc не найден (это не&lt;br /&gt;
приводит к завершению программы, поскольку, не найдя свой соб-&lt;br /&gt;
ственный rc-файл, приложение берет стандартный из KDE 4). Наша&lt;br /&gt;
программа не может найти файл kapp4ui.rc потому, что ищет его не&lt;br /&gt;
там, где он лежит. Глобально установленные приложения, доступ-&lt;br /&gt;
ные всем пользователям, хранят свои файлы *ui.rc в общедоступ-&lt;br /&gt;
ной директории (например, /usr/share/kde4/apps/имя_приложения).&lt;br /&gt;
Для сохранения ваших персональных настроек следует воспользо-&lt;br /&gt;
ваться каталогом ~/.kde4/share/apps/имя_приложения.&lt;br /&gt;
&lt;br /&gt;
=== Система настройки ===&lt;br /&gt;
Выше я уже упоминал о том, что стандартный проект приложения&lt;br /&gt;
KDE 4 по умолчанию снабжается системой настройки. Ее можно раз-&lt;br /&gt;
делить на две части: настройка панелей инструментов, сочетаний&lt;br /&gt;
горячих клавиш – с одной стороны, и конфигурация специфических&lt;br /&gt;
параметров работы приложения – с другой. Особенность настройки&lt;br /&gt;
первого типа заключается в том, что, по существу, она одинако-&lt;br /&gt;
ва для всех приложений KDE и может быть легко формализована.&lt;br /&gt;
Однако разработчики KDE на этом не успокоились и сделали все&lt;br /&gt;
возможное, чтобы охватить и процесс создания средств специфи-&lt;br /&gt;
ческой настройки приложений. Окно специальных настроек (рис. 2)&lt;br /&gt;
открывается по команде Configure KApp4... меню Settings.&lt;br /&gt;
&lt;br /&gt;
Как мы видим, здесь можно настроить цвет шрифта и фона&lt;br /&gt;
чей областью, ведь он ничего не делает!) и возраст проекта в днях. В&lt;br /&gt;
результате внешний вид программы может довольно сильно изме-&lt;br /&gt;
ниться (рис. 3).&lt;br /&gt;
&lt;br /&gt;
Глобальные установки хранятся в директории /usr/share/kde4/config, а локальные – в ~/.kde4/share/config. После нескольких&lt;br /&gt;
запусков программы KApp4 я нашел в ней два файла: KApp4rc, где&lt;br /&gt;
хранятся параметры рабочей области, и kapp4rc, содержащий дан-&lt;br /&gt;
ные о геометрии главного окна и видимости его элементов. Следует&lt;br /&gt;
отметить, что многие программы KDE 4 хранят свои параметры кон-&lt;br /&gt;
фигурации сразу в нескольких файлах.&lt;br /&gt;
&lt;br /&gt;
Для управления настройками создается глобальный объект&lt;br /&gt;
класса Settings. Получить указатель на него можно с помощью ста-&lt;br /&gt;
тического метода Settings::self(). Рассмотрим фрагмент исходного&lt;br /&gt;
текста класса KApp4, управляющий созданием диалогового окна&lt;br /&gt;
настроек:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;KConfigDialog *dialog = new KConfigDialog(this, &amp;quot;settings&amp;quot;,Settings::self());&lt;br /&gt;
QWidget *generalSettingsDlg = new QWidget;&lt;br /&gt;
ui_prefs_base.setupUi(generalSettingsDlg);&lt;br /&gt;
dialog-&amp;gt;addPage(generalSettingsDlg, i18n(&amp;quot;General&amp;quot;), &amp;quot;package_setting&amp;quot;);&lt;br /&gt;
connect(dialog, SIGNAL(settingsChanged(QString)), m_view, SLOT(settingsChanged()));&lt;br /&gt;
dialog-&amp;gt;setAttribute( Qt::WA_DeleteOnClose );&lt;br /&gt;
dialog-&amp;gt;show();&amp;lt;/source&amp;gt;&lt;br /&gt;
Здесь создается объект dialog класса KConfigDialog, который&lt;br /&gt;
реализует диалоговое окно. Конструктору класса передается указа-&lt;br /&gt;
тель на объект Settings. Далее создается объект generalSettingsDlg&lt;br /&gt;
класса QWidget. Он должен стать главной страницей окна настроек.&lt;br /&gt;
Внешний вид объекта generalSettingsDlg задается методом ui_prefs_&lt;br /&gt;
base.setupUi() (так же, как и в Qt 4). Затем, с помощью метода&lt;br /&gt;
addPage() новая страница добавляется в окно настроек. Остается&lt;br /&gt;
только связать сигнал settingsChanged объекта dialog с одноимен-&lt;br /&gt;
ным слотом объекта m_view (рабочая область окна программы).&lt;br /&gt;
Обработчик сигнала settingsChanged может извлекать данные об&lt;br /&gt;
изменениях настроек из строки, переданной ему в качестве пара-&lt;br /&gt;
метра, или непосредственно из объекта Settings, который суще-&lt;br /&gt;
ствует глобально (именно так и поступает слот settingsChanged()&lt;br /&gt;
в рассматриваемой программе). Взаимоотношения между окном&lt;br /&gt;
KConfigDialog, объектом Settings и рабочей областью окна можно&lt;br /&gt;
проиллюстрировать графически (рис. 4).&lt;br /&gt;
&lt;br /&gt;
Скорее всего, разработчики KDE 4 почувствовали то же, что чув-&lt;br /&gt;
ствуете сейчас вы: программирование всех этих классов настройки&lt;br /&gt;
вручную слишком утомительно. Поэтому они решили автоматизиро-&lt;br /&gt;
вать процесс. Для создания класса Settings и его вспомогательного&lt;br /&gt;
класса была использована специальная консольная утилита – kconfig_&lt;br /&gt;
compiler. На самом деле это, конечно, не компилятор, а генератор&lt;br /&gt;
исходных текстов, которые потом компилируются GCC. Исходниками&lt;br /&gt;
для kconfig_compiler являются два файла – kapp4.kcfg и kapp4.kcfgc.&lt;br /&gt;
Если вы откроете файл kapp4.kcfg в стандартном окне просмотра&lt;br /&gt;
Dolphin (мы ведь работаем в KDE 4, не так ли?), то увидите только&lt;br /&gt;
невразумительное:&lt;br /&gt;
 color of the background black color of the foreground yellow size of a ball 2&lt;br /&gt;
Дело в том, что kapp4.kcfg – файл в формате XML. Чтобы&lt;br /&gt;
понять, как он выглядит на самом деле, нужно выбрать команду&lt;br /&gt;
View Document Source. Основные тэги файла *.kcfg – это &amp;lt;kcfgfile&amp;gt;,&lt;br /&gt;
&amp;lt;group&amp;gt; и &amp;lt;entry&amp;gt;. Тэг &amp;lt;kcfgfile&amp;gt; принимает в качестве параме-&lt;br /&gt;
тра имя файла, где будут сохраняться настройки программы. Тэг&lt;br /&gt;
&amp;lt;group&amp;gt; описывает группу настроек. Его дочерние элементы – тэги&lt;br /&gt;
&amp;lt;entry&amp;gt; – представляют собой отдельные настройки (имя перемен-&lt;br /&gt;
ной, в которой будет храниться значение конфигурационного пара-&lt;br /&gt;
метра, тип данных, имя настройки, предназначенное для пользова-&lt;br /&gt;
теля и значение по умолчанию). Кроме того, файлы *.kcfgc содер-&lt;br /&gt;
жат указания для генератора kconfig_compiler. Их можно сравнить&lt;br /&gt;
с Make-файлами GCC.&lt;br /&gt;
&lt;br /&gt;
Что ж, для первого раза, наверное, достаточно. Загляните в те&lt;br /&gt;
файлы, на которые нам не хватило места, а если вы достаточно&lt;br /&gt;
храбры – попробуйте модифицировать программу, вооружившись&lt;br /&gt;
только что полученными знаниями.&lt;/div&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	</feed>