четверг, 20 января 2011 г.

Лекции и лабы по Qt

Вот здесь есть лекции и лабы по Qt от Нокии на английском. Можно скачать по отдельности или все целиком. Перевод на русский- в процессе.

пятница, 7 января 2011 г.

Плагин для макросов

Не знаю, часто ли у других возникает необходимость полностью чистить проект для того, чтобы его нормально собрать, но у меня перидически возникает. Например, ребилд перестает работать после ошибки линкера, когда метод объявлен, но не реализован. Лечится это просто- Clean, затем Build, но хотелось бы, чтобы все это висело на одной кнопке.

Мир- он все же не без добрых людей. Вот здесь в репозитории плагинов лежит исходный код плагина macros. После минимальных исправлений, плагин собрался для Qt Creator 2.1 RC1, и я его сразу же попробовал.

Ну, что сказать. Плагин пока не доделан. Записывается только один макрос, и то в память, не в файл. Работает только для редактора, т.е. если страница Edit неактивна, то записать или проиграть макрос нельзя. И еще одно- горячие клавиши у плагина- Alt-( и Alt-). Alt-) совпадает с Alt-0, что не есть здорово. Может, они на самом деле Alt-Shift-9 и Alt-Shift-0, не знаю.

Из хороших новостей пока только одна- плагин, вроде бы, регулярно обновляется. Будем ждать когда допилят...

понедельник, 3 января 2011 г.

Пишем плагин для Qt Creator - часть 3

Я в отпуске, так что появилось время написать следующую серию про создание плагинов для Qt Creator. Предыдущий пост на ту же тему Сборка и отладка плагинов для Qt Creator 2.1 практически заменяет вот эти две старые части:
Итак,

Часть 3 - Настройки плагина
В этой части речь пойдет про создание страницы в диалоге Tools->Options. Для эксперимента возьмем уже существующую страницу установок C++. Можно добавить свою, но интереснее добавить таб вот сюда:



...чтобы в итоге получилось вот что:



Мы будем использовать тот же плагин DoNothing, что и в предыдущих постах.
Да, чуть не забыл. Версия Qt Creator- 2.1 RC 1 (2.0.94). Версия Qt- 4.7.1.

Категория плагина
Перед тем, как начать конструировать страницу опций, определим категорию плагина. Это может быть как одна из уже существуюших категорий (Build Systems, C++, Version Control и т.д.), так и абсолютно новая категория. Категория- это ветка в окне Installed Plugins, которое вызывается из меню Help->About Plugins. На рисунке внизу DoNothing живет в своей собственной категории Useless:



Категория задается в спеке плагина donothing.pluginspec строкой:
<category>Useless</category>
В дальнейшем будем использовать уже существующую категорию "C++".

Зависимости
В спек и в файл проекта надо добавить две зависимости- Project Explorer и CppTools.

Настройки плагина
В Qt Creator для настроек есть диалог Options. Понятно, что нам надо создать виджеты для этого диалога, сделать их доступными для Qt Creator и научить наш плагин получать информации от виджетов.
Настроек добавим две- option1CheckBox и option2CheckBox. Они будут частью виджета DoNothingSettingsWidget:



Внутреннее устройство
Для работы понадобятся четыре класса:
  • DoNothingSettings - собственно определяет настройки плагина (bool option1 и option2) и методы readSettings() и writeSettings() для загрузки при запуске Qt Creator и сохранения настроек при их изменении пользователем;
  • DoNothingSettingsPageWidget - наследуется от QWidget и содержит наш виджет. Также определяет геттер и сеттер для настроек, т.е. транслирует ГУЙ в bool и обратно. Также он реализует метод searchKeywords() для поддержки класса страницы DoNothingSettingsPage, о котором ниже;
  • DoNothingSettingsPage - наследуется от Core::IOptionsPage, содержит указатель на DoNothingSettingsPageWidget и отвечает за работу страницы настроек в целом. Он определяет унаследованные методы для регистрации и работы страницы настроек(createPage(), apply(), matches(), id(), displayName() и пр.). Именно этот класс позволяет добавить наш виджет в любую страницу настроек;
  • DoNothingPlugin - собственно класс плагина. Нследуется от IPlugin, содержит экземпляр класса DoNothingSettings и указатель на страницу настроек. Этот класс определяет работу всего плагина. Для нас сейчас выжны методы initialize(), и геттер и сеттер для настроек.
Надо отметить, что различные плагины в Qt Creator по-разному хранят настройки. В одних реализациях экземпляр класса XxxSettings принадлежит XxxSeetingsPageWidget или XxxSettingsPage, в других- самому плагину, как в моем примере.
Как же удается добавить наш новый таб в существующую страницу настроек? Класс DoNothingSettingsPage определяет методы category() и displayCategory(). Также он определяет и иконку, которая будет отображаться на нашей странице- categoryIcon(). Практически, все, что надо сделать, это:

QString DoNothingSettingsPage::category() const
{
return QLatin1String("I.C++");
}

QString DoNothingSettingsPage::displayCategory() const
{
return QCoreApplication::translate("DoNothing", QT_TRANSLATE_NOOP("DoNothing", "C++");
}

QIcon DoNothingSettingsPage::categoryIcon() const
{
return QIcon(QLatin1String(":/core/images/category_cpp.png"));
}

В методе DoNothingPlugin::initialize() надо создать страницу настроек с помощью:

// create the settings page and add a tab to the chosen category
doNothingSettingsPage = new DoNothingSettingsPage();
addAutoReleasedObject(doNothingSettingsPage);

Файлы плагина
В принципе, вот такие файлы надо будет создать:
  • donothingsettingswidget.ui - содержит ГУЙ нашешего виджета;
  • donthingconstants.h - содержит константы для класса DoNothingSettingsPage и DoNothingSettings;
  • donothingsettings.h (и donothingsettings.cpp) - содержит класс DoNothingSettings и операторы == и != над ним;
  • donothingsettingspage.h (donothingsettingspage.cpp) - содержит классы DoNothingSettingsPageWidget и DoNothingSettingsPage.
Имена файлов- традиционные для плагинов Qt Creator.

Исходный код
Я не стал здесь приводить исходный код, все равно проще его смотреть в самом креаторе. Код можно скачать отсюда: QtCreatorPlugins-Part3.zip. Надо просто создать папку и разархивировать в нее.