Минимальный плагин
Этот плагин ничего полезного делать не будет, поэтому называется он DoNothing. Цель его создания- получить скелет, на который потом можно нарастить мясо. Вместе с тем, плагин должен успешно определяться по команде Help->About Plugins...
Что надо сделать:
- Скачать исходный код Qt Creator 1.3.
- Создать директорию для нового плагина.
- Создать файл проекта.
- Создать файл спецификации плагина.
- Создать файлы с исходным кодом.
- Собрать плагин и загрузить.
1. Исходный код Qt Creator 1.3
Скачиваем исходный код Qt Creator 1.3.0 и распаковываем, например, сюда: d:\Projects\qt-creator-1.3.0\.
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
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
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>
<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
#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 class
Q_EXPORT_PLUGIN(DoNothingPlugin)
#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 class
Q_EXPORT_PLUGIN(DoNothingPlugin)
Комментарии в методах объясняют, для чего, собственно, эти методы нужны и когда они вызываются.
6. Сборка и использование плагина
Я собирал под Qt Creator 1.3. SDK можно взять здесь. Для Wiindows надо скачать сборку Qt 4.6 для MSVC.
Открываем наш плагин 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... видим наш новый плагин:
А что делать, если Qt Creator не видит этот плагин?
ОтветитьУдалитьВы собирали плагин с помощью MinGW? Просто библиотеки, собранные MinGW могут не подходить для сборки QtCreator (который собирается MSVS). У меня была такая проблема при сборке плагина для QtDesigner. Решил сборкой QtCreator с помощью MinGW.
УдалитьQt надо собирать/скачивать для своей платформы и компилятора, так что я помнится собирал подо все, что угодно. Что касается MiniGW и MSVC- у них точно name mangling разный, так что линковать их вместе нечего и пытаться.
УдалитьЧестно говоря- не знаю. Четыре года как не проверял. Попробою как-нибудь на досуге пересобрать, тогда отпишусь сюда.
ОтветитьУдалить