本系列文章翻译自: Writing Qt Creator Plugins. 如果任何人或机构对于版权有异议, 请联系我.
本文将使用 QtCreator-2.8.1 版本进行插件开发, 由于 QtCreator-2.8.1 的插件机制进行了部分更改, 因此将根据 QtCreator-2.8.1 插件机制为基础撰写本文.
一, QtCreator 源码编译
1, 构建目录的创建
QtCreator 工程的源码编译推荐在独立工作目录进行, 避免源码被污染. 在 QtCreator 工程的根目录下创建 build 目录.
2, 生成工程 MakeFile 文件
在 build 目录下使用命令行运行:
qmake ../qtcreator.pro -recursive
如果报错, 错误信息如下: QMAKESPEC has not been set, so configuration cannot be deduced.
解决方法:
export QMAKESPEC=/usr/local/Trolltech/Qt-4.8.6/mkspecs/linux-g++
3, 编译构建
在 build 目录下使用命令行运行:
make
不同的操作系统可能为 mingw32-make 或 nmake.
4, 结果查看
编译完成后, 在 build/bin 目录下查看并运行 qtcreator.
二, 简单插件开发
1, 创建插件工程
学习 QtCreator 插件开发的最好方式就是实际动手编写一个 QtCreator 插件. 本文将编写一个什么也不做的 QtCreator 插件 DoNothing, 目的在于熟悉 QtCreator 基本的类, 感受创建一个 QtCreator 插件的过程.
本文将不依赖于 Qt Creator 提供的项目向导, 而是直接以. pro 文件创建插件.
在 $$QT_CREATOR_ROOT/src/plugins 目录下创建一个目录 DoNothing. 插件的所有源码放在 DoNothing 目录中.
在 qt-creator-2.8.1-src/src/plugins 目录创建 DoNothing 目录, DoNothing.pro 文件内容如下:
- DoNothing.pro:
- TEMPLATE = lib
- TARGET = DoNothing
- include(../../qtcreatorplugin.pri)
- #DESTDIR = $$IDE_PLUGIN_PATH/Scorpio
- PROVIDER = Scorpio
- include(../../plugins/coreplugin/coreplugin.pri)
- HEADERS += DoNothingPlugin.h
- SOURCES += DoNothingPlugin.cpp
- OTHER_FILES += DoNothing.pluginspec \
DoNothing_dependencies.pri
工程配置文件 DoNothing.pro 配置了插件的如下内容:
A,TEMPLATE 声明 DoNothing 插件是一个库
B,TARGET 声明目标文件名称, 目标文件将是 DoNothing.dll 或是 libDoNothing.so;
C, 配置 DoNothing 使用 qtcreatorplugin.pri 中定义的设置;
D,DESTDIR 指定目标输出目录为 $$IDE_PLUGIN_PATH/Scorpio. 默认情况下是 $$IDE_PLUGIN_PATH/QtProject. 如果指定了输出目录, 需要将生成的插件拷贝到 $$IDE_PLUGIN_PATH/QtProject 目录, QtCreator 才能加载成功.
E,PROVIDER 为提供插件的公司或者组织名字;
F, 配置 DoNothing 使用 coreplugin.pri 定义的设置;
G,HEADERS 提供组成插件的. h 文件
H,SOURCES 提供组成插件的. cpp 文件
I,OTHER_FILES 提供插件需要的其它文件, 如依赖文件
2, 标记要编译的插件
在 qt-creator-2.8.1-src/src/plugins/plugins.pro 文件尾添加要编译的插件:
SUBDIRS += DoNothing
确保再次编译 QtCreator 的时候, DoNothing 插件会与其它插件一起被编译.
3, 插件实现
在目录下创建 DoNothing 插件的实现文件. 所有的插件都需要实现 IPlugin 接口.$$QT_CREATOR_ROOT/src/plugins/
DoNothing/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
DoNothingPluigin.cpp 文件如下:
- #include "DoNothingPlugin.h"
- #include <QtPlugin>
- #include <QStringList>
- DoNothingPlugin::DoNothingPlugin()
- {
- // Do nothing
- }
- DoNothingPlugin::~DoNothingPlugin()
- {
- // Do notning
- }
- bool DoNothingPlugin::initialize(const QStringList& args, QString *errMsg)
- {
- Q_UNUSED(args);
- Q_UNUSED(errMsg);
- return true;
- }
- void DoNothingPlugin::extensionsInitialized()
- {
- // Do nothing
- }
- void DoNothingPlugin::shutdown()
- {
- // Do nothing
- }
- Q_EXPORT_PLUGIN(DoNothingPlugin)
initialize()函数会在 Qt Creator 请求插件初始化时被调用, 常用于初始化插件的内部状态和插件注册 actions/objects 到 QtCreator. 当插件依赖的所有资源都被加载后, initialize()函数才会被调用. 初始化成功返回 true, 用于告诉 QtCreator 本插件已经初始化成功. 如果初始化不成功, 应该在 errMsg 中存储可读的错误信息, 供 QtCreator 在界面上显示出来.
extensionsInitialized()函数在插件初始化后被调用 (例如 initialize() 函数调用后).extensionsInitialized()函数会由第一个依赖于本插件的其他插件进行调用.
shutdown()函数在插件即将被卸载的时候调用.
Q_EXPORT_PLUGIN()宏用于将类导出.
4, 编写 pluginspec 插件描述文件
每个插件都需要提供一个插件描述文件 pluginspec, 用于提供关于插件的元数据, 例如版本, 依赖项等. DoNothing 插件的 pluginspec 文件 DoNothing.pluginspec 内容如下:
- <plugin name="DoNothing" version="1.0.0" compatVersion="2.8.1">
- <vendor>Scorpio.org</vendor>
- <copyright>(C) 2010-2011 Scorpio.org</copyright>
- <license>Do anything you want.</license>
- <description>A plugin that does nothing.</description>
- <url>http://www.scorpio.net</url>
- <dependencyList>
- <dependency name="Core" version="2.8.1"/>
- </dependencyList>
- </plugin>
pluginspec 文件是一个 XML 文件, 提供了如下信息:
插件名称: 插件名称用于作提供插件实现的库的名称
插件版本号
要求的 Qt Creator 的版本号
插件提供者.
版权.
协议文本.
插件描述.
插件提供者的 URL.
依赖列表. 列出本插件依赖的所有插件, Qt Creator 将保证此处列出的所有依赖项都加载并且初始化后采取加载本插件.
5, 编写插件依赖描述文件
DoNothing.pro 会利用 qtcreatorplugin.pri 文件检查插件相应的依赖信息. 因此需要创建一个插件依赖描述文件 xxx_dependencies.pri.
DoNothing_dependencies.pri 文件内容如下:
- QTC_PLUGIN_NAME = DoNothing
- QTC_PLUGIN_DEPENDS += \
- Coreplugin
文件说明了插件的名称和依赖
6, 编译插件
DoNothing 目录下文件如下:
从命令行进入 build 目录, 执行如下命令:
qmake ../qtcreator.pro -recursive
make
/build/lib/qtcreator/plugins 目录下会有一个 QtProject 目录, 即编译链接的插件的目录.
7, 插件查看
运行 build/bin 目录下的 QtCreator, 在帮助菜单中 "已安装插件" 的对话框中可以找到 DoNothing 插件:
来源: http://blog.51cto.com/9291927/2105348