QtCreator插件开发(一)——QtCreator插件实例

QtCreator插件开发(一)——QtCreator插件实例

版权声明:
本系列文章翻译自: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

时间: 2024-08-03 21:12:33

QtCreator插件开发(一)——QtCreator插件实例的相关文章

QtCreator插件开发(二)——QtCreator菜单和菜单项

QtCreator插件开发(二)--QtCreator菜单和菜单项 一.QtCreator菜单栏简介 1.QtCreator菜单简介 QtCreator菜单栏如下:QtCreator默认菜单包括"文件"."编辑"."工具"."窗体"."帮助"."构建"."调试"."分析"由插件提供,不是QtCreator的默认菜单.在"帮助"菜

QtCreator插件开发(三)——QtCreator架构

QtCreator插件开发(三)--QtCreator架构 一.QtCreator架构简介 QtCreator的核心就是一个插件加载器,其所有功能都是通过插件实现的.QtCreator架构如下:QtCreator的核心功能由Core Plugin (Core::ICore)实现.插件管理器(ExtensionSystem::PluginManager)对插件协作提供了简单方式,允许插件为其他插件扩展提供钩子.PluginManager负责插件的加载,管理,销毁等工作.Core插件是QtCreat

【手把手教你Eclipse插件开发】之插件入门

最近由于特殊需要,开始学习插件开发. 以前接触java也算有些时日,但是一直不知道有插件开发这样一种技术路径,本想着这开发工具都给你备好了,直接用不就行了.但是总有些IT工厂,为了要节约成本,开发自己的开发工具,但是又要节省时间,总不能一切都自己来.毕竟开发一个eclipse也要很长时间的.因此,插件开发出现在历史舞台. 首先要了解插件开发,就得从SWT/JFACE说起了.SWT是一种开源的界面开发框架,以前学java的时候,总是用一些panel,就类似这个.JFace又是一种基于SWT的UI不

jQuery插件实例四:手风琴效果[无动画版]

手风琴效果就是内容的折叠与打开,在这个插件中,使用了三种数据来源:1.直接写在DOM结构中:2.将数据写在配置项中:3.从Ajax()中获取数据.在这一版中,各项的切换没有添加动画效果,在下一版中会是有动画效果的. 在这个插件中,CSS和JS的配置非常重要,需要特别注意.另外,加个思考,请先看完后再想这个问题:当点击其中某项时,给width直接添加animate是否合适,当快速在其上移动时,如何保证效果? 效果图预览 插件JS accordionB.js 1 ; 2 (function ($,

word插件开发 运行时,插件不启动.

  查看插件信息时. 在禁用的应用程序加载项中.   启动禁用的插件: 点击转到.  选择你要启动的插件就可以了. word插件开发 运行时,插件不启动.,布布扣,bubuko.com

插件实例修改2

这个是根据前面一篇项目作出修改,那个增加的页面都是列表页面 配置文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <xp-web> 3 <modules> 4 <!-- 第三方APP服务端 --> 5 <module path="/web/plugins/bs/yygl/bz/extapp" form="" scope="

插件实例修改3

根据我前2篇项目,又做了更新,把3tab页面合成一个页面,主要用到easyui 页面布局 配置文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <xp-web> 3 <modules> 4 <!-- 第三方APP服务端 --> 5 <module path="/web/plugins/bs/yygl/bz/extapp" form="&quo

插件实例修改

前端框架是easyui框架,后台的框架是我们公司自己写的.做的功能主要是插件修改,使用easyui iframe, tab,datagrid组件 配置文件 <?xml version="1.0" encoding="UTF-8"?> <xp-web> <modules> <!-- 第三方APP服务端 --> <module path="/web/plugins/bs/yygl/bz/extapp&quo

插件实例修改4

在插件实例修改3增加一个联系人功能 配置文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <xp-web> 3 <modules> 4 <!-- 第三方APP服务端 --> 5 <module path="/web/plugins/bs/yygl/bz/extapp" form="" scope="request"