本文将使用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.exe。

二、简单插件开发

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 = DoNothingQTC_PLUGIN_DEPENDS += \Coreplugin

文件说明了插件的名称和依赖

6、编译插件

DoNothing目录下文件如下:

从命令行进入build目录,执行如下命令:

qmake ../qtcreator.pro -recursivemake

/build/lib/qtcreator/plugins目录下会有一个QtProject目录,即编译链接的插件的目录。

7、插件查看

运行build/bin目录下的QtCreator,在帮助菜单中“已安装插件”的对话框中可以找到DoNothing插件:

QtCreator插件开发(一)——QtCreator插件实例相关推荐

  1. idea插件开发--服务-翻译插件

    gitee地址:https://gitee.com/jyq_18792721831/studyplugin.git idea插件开发入门 idea插件开发–配置 idea插件开发–服务-翻译插件 id ...

  2. 《Abaqus GUI程序开发指南(Python语言)》——第一章 概述1.1 简单插件实例——创建带孔板有限元模型...

    本节书摘来自异步社区<Abaqus GUI程序开发指南(Python语言)>一书中的第1章,第1.1节,作者: 贾利勇 , 富琛阳子 , 贺高 , 周正光 更多章节内容可以访问云栖社区&q ...

  3. jQuery起点教程之有序化插件实例

    jQuery起点教程之有序化插件实例是一篇使用jquery的tablesorter插件来实现一些功能效果的教程,大家可以认真学习一下.Sort me将我有序化:使用tablesorter插件进行表格排 ...

  4. FastAdmin插件开发辅助增强插件

    本人开发的FastAdmin插件开发辅助增强插件 不改变官方的开发习惯,但更丝滑,尽最大的努力生成你想要的代码 非常重要 非常重要 非常重要 写在最前面是为了不要漏了,导致插件没有正常工作. 编写代码 ...

  5. PHP写的电视直播插件实例创建流程

    PHP写的电视直播插件实例创建流程 这是最近写的一个PHP电视直播插件实例. 作者:G.FLOWER 主页:https://wdc.store 目录结构: 创建zb目录,可放在网站二级目录 创建zby ...

  6. 前端压缩图片 -- vue项目使用localResizeIMG插件 -- 实例

    前端压缩图片 -- vue项目使用localResizeIMG插件 -- 实例 本博没有新的东西, 都是东拼西凑的. 但是, 组合出了个宝贝, 包括: 文件类型/宽高/大小的校验, 还有展示图片 参照 ...

  7. 【Chrome浏览器插件开发】浏览器插件运行机制03之实战使用Vue.js 3 + Vite 2开发出简易的浏览器插件(含源码)

    文章目录 知识点: 一.使用 vite 创建项目 1.1 环境搭建 1.2 安装vite工具 1.3 创建vite项目 1.4 进入项目并安装依赖 1.5 修改端口 1.6 运行项目 二.创建项目资源 ...

  8. QtCreator插件开发(四)——QtCreator编辑器

    一.HTML编辑器核心类和接口简介 1.HTML编辑器简介 QtCreator最基本的功能是一个文本编辑器.QtCreator还提供了编辑UI文件.QRC文件.PRO/PRI文件以及EXE/DLL/S ...

  9. QtCreator格式化代码---Beautifier插件使用方式

    开启Beautifier插件支持 Qtcreator进入Help->About Plugins -> C++ -> Beautifier选中复选框,之后重启. 再进入Tools-&g ...

最新文章

  1. 双向链表_如何通过Java单次查找链表的中间元素
  2. 【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )
  3. 从理论到实践,机器人SLAM技术详解
  4. centos 6安装报错
  5. junit测试spring_使用Spring JUnit规则进行参数化集成测试
  6. 阿里云杨敬宇:四层技术构建基于城市场景的边缘计算
  7. MySQL常见错误代码(转)
  8. 使用dd工具对磁盘RAID5和10进行I/O性能测试
  9. MATLAB对表达式进行降幂排列,MATLAB上机答案.doc
  10. 二级c语言考试系统安卓,二级C语言考试系统
  11. openwrt 添加usb网卡_【沙发管家】路由器USB接口的用处你真的了解么?
  12. Mac上有哪些好用的写作软件?四类写作软件总有一款适合你!
  13. C# E-Mail邮件发送
  14. Windows 10 驱动开发 及 驱动签名
  15. 视频编码第一节:H.265/HEVC原理——入门
  16. 手机计算机表白公式,表白公式数学公式
  17. 程序员的种种崩溃瞬间
  18. 2023华中师范大学新传考研经验
  19. 超详细的C++入门学习(命名空间,缺省参数,内联函数,函数重载等)
  20. 从蓝海战略到长尾理论

热门文章

  1. canvas 像素操作
  2. django 4.0 应用程序的创建和配置(分布式布置)
  3. python爬虫+pygal交互式可视化爬取大学QS排名
  4. Leetcode刷题100天—566. 重塑矩阵(数组)—day25
  5. 携手数字创新 共筑国产生态 7月份AntDB与5款产品完成互认证
  6. 《数据结构与算法》—— O(3N)=O(N) ?
  7. easyui获取图片路径_在线计算图片热点植入位置的方法与流程
  8. Excel-多条件排名时间排名
  9. 利用java知识做一个模拟qq登入模拟界面
  10. 5G换手机不必换号 中国移动已确认资费不会高于4G