Я тут нарыл неплохой
документ по созданию плагинов с нуля. Он сильно экономит время- не надо лазить по хелпу и рыться в исходниках, пытаясь понять, с чего начать. Сразу скажу, что переводить эту доку на русский дословно я здесь не буду. Вместо этого кратко изложу, как я делал этот минимальный плагин, используя доку от VCreate Logic. Итак, часть 1-я.
Минимальный плагин
Этот плагин ничего полезного делать не будет, поэтому называется он DoNothing. Цель его создания- получить скелет, на который потом можно нарастить мясо. Вместе с тем, плагин должен успешно определяться по команде Help->About Plugins...
Что надо сделать:
- Скачать исходный код Qt Creator 1.3.
- Создать директорию для нового плагина.
- Создать файл проекта.
- Создать файл спецификации плагина.
- Создать файлы с исходным кодом.
- Собрать плагин и загрузить.
1. Исходный код Qt Creator 1.3
2. Директория плагина
Директорию для исходников надо создать там же, где лежат исходники для остальных плагинов: d:\Projects\qt-creator-1.3.0\src\plugins\donothing
Далее все файлы будем создавать в этой директории. Соглашение об именах- я использую типичные для Qt Creator имена файлов и директорий. Регистр написания имен так же традиционен.
3. Файл проекта
Файл проекта назовем donothing.pro. Вот его содержимое:
TEMPLATE = lib
TARGET = DoNothing
include(../../qtcreatorplugin.pri)
include(../../plugins/coreplugin/coreplugin.pri)
HEADERS += donothingplugin.h
SOURCES += donothingplugin.cpp
OTHER_FILES += DoNothing.pluginspec
Этот файл:
- говорит, что выходом будет библиотека (DoNothing.dll на Windows)
- заставляет DoNothing читать установки из qtcreatorplugin.pri и coreplugin.pri
- указывает .cpp и .h файлы с кодом плагина
- добавляет в проект спецификацию плагина (не обязательно, но удобно)
Нам еще надо добавить наш плагин в проект всех плагинов. Добавляем вот эти строки в конец файла d:\Projects\qt-creator-1.3.0\src\plugins\plugins.pro:
SUBDIRS += plugin_DoNothing
plugin_DoNothing.subdir = donothing
4. Файл спецификации плагина
Файл спецификации назовем DoNothing.pluginspec. Туда надо записать:
<plugin name="DoNothing" version="0.0.1" compatVersion="1.3.0">
<vendor>VCreate Logic Pvt. Ltd.</vendor>
<copyright>(C) 2008-2009 VCreate Logic Pvt. Ltd.</copyright>
<license>Do anything you want</license>
<description>A plugin that does nothing</description>
<url>http://www.vcreatelogic.com</url>
<dependencyList>
<dependency name="Core" version="1.3.0"/>
</dependencyList>
</plugin>
Ключевых моментов тут два:
- Необходимая версия Qt Creator- 1.3.0
- Наш плагин зависит от плагина Core
5. Исходный код
Хедер файл назовем donothingplugin.h
Вот что в него надо записать:
#ifndef DONOTHINGPLUGIN_H#define DONOTHINGPLUGIN_H#include <extensionsystem/iplugin.h>class DoNothingPlugin
: public ExtensionSystem
::IPlugin{public: DoNothingPlugin
(); ~DoNothingPlugin
(); void extensionsInitialized
(); bool initialize
(const QStringList & arguments
, QString * errorString
); void shutdown
();};#endif // DONOTHINGPLUGIN_H Наш плагин- это потомок IPlugin, который опрделяет интерфейс плагинов.
А вот и сишник (donothingplugin.cpp), который все объявленные методы и реализует:
#include "donothingplugin.h"#include <QtPlugin>#include <QStringList>DoNothingPlugin
::DoNothingPlugin(){ // Do nothing}DoNothingPlugin
::~DoNothingPlugin(){ // Do notning}bool DoNothingPlugin
::initialize(const QStringList& args
, QString *errMsg
){ // The initialize() method is called when Qt Creator wants the plugin to initialize itself. This function is ideally used to initialize the internal state of the plugin and register actions/objects with Qt Creator. // The function is called after all the dependencies of this plugin have been loaded. Q_UNUSED
(args
); Q_UNUSED
(errMsg
); // Since our plugin really does nothing, we return true signifying that the initialization was successful. If the initialization was unsuccessful (for some wired reason); the errMsg string should be set to a human readable error message. return true
;}void DoNothingPlugin
::extensionsInitialized(){ // The extensionsInitialized() method is called after this plugin has been initialized (ie. after initialize() method has been called). This method is called on plugins that depend on this plugin first. // Do nothing}void DoNothingPlugin
::shutdown(){ //The shutdown() method is called when the plugin is about to be unloaded. // Do nothing}// export the plugin classQ_EXPORT_PLUGIN
(DoNothingPlugin
) Комментарии в методах объясняют, для чего, собственно, эти методы нужны и когда они вызываются.
6. Сборка и использование плагина
Открываем наш плагин donothing.pro- File->Open File or Project. Build->Set Build Configuration: Release. И делаем Ctrl-B.
Если что не собирается, вот
здесь я написал как собирать плагины для Qt Creator.
Копируем DoNothing.dll (libDoNothing.so в Linux) и DoNothing.pluginspec из d:\Projects\qt-creator-1.3.0\lib\qtcreator\plugins\Nokia\ в ту же директорию Nokia, но в Qt Creator 1.3.0. Перезапускаем Qt Creator.
По команде Help->About Plugins... видим наш новый плагин: