QCAD插件可以用来扩展QCAD的功能,用C或C++进行功能实现。
所有的QCAD插件必须直接或间接地从QObject和抽象基类RPluginInterface派生。
一、项目文件编辑
需要工程管理文件.pro ,源码文件.cpp,头文件.h和资源管理文件.qrc
1、工程文件配置.pro
# 项目加入 plugin 模块
CONFIG += plugin
# 表示生成的目标可执行文件的名称,此处为qcadexample.lib
TARGET = example
# 指向QCAD源代码安装的shared.pri文件;
include(../../../shared.pri)
# 选择lib模板
TEMPLATE = lib
# 头文件和源码文件
HEADERS = RExamplePlugin.h
SOURCES = RExamplePlugin.cpp
# 指向可执行程序存放的的plugins文件夹,这样插件
# 就可以在正确的位置编译,QCAD也可以从那里加载它;
DESTDIR = $$PWD/../../../plugins
# 库文件 ,用法LIBS += -L路径 -l文件 -l文件
LIBS += -lqcadcore -lqcadgui -lqcadecmaapi
# 资源文件
RESOURCES = scripts.qrc
2、源码文件 .cpp
#include "RExamplePlugin.h"
RPluginInfo RExamplePlugin::getPluginInfo() {
RPluginInfo ret;
ret.set("Version", "1.0");
ret.set("ID", "EXAMPLE");
ret.set("Name", "Example Plugin");
ret.set("License", "GPLv3");
ret.set("URL", "http://qcad.org");
return ret;
}
#if QT_VERSION < 0x050000
QT_BEGIN_NAMESPACE
Q_EXPORT_PLUGIN2(example, RExamplePlugin)
QT_END_NAMESPACE
#endif
3、头文件 .h
#include <QObject>
#include <QScriptEngine>
#include "RPluginInterface.h"
class RExamplePlugin : public QObject, public RPluginInterface
{
Q_OBJECT
Q_INTERFACES(RPluginInterface)
#if QT_VERSION >= 0x050000
Q_PLUGIN_METADATA(IID "org.qcad.exampleplugin")
#endif
public:
// 初始化
virtual bool init() { return true; }
virtual void uninit(bool) {}
virtual void postInit(InitStatus) {}
// 初始化js扩展
virtual void initScriptExtensions(QScriptEngine&) {}
// 插件信息
virtual RPluginInfo getPluginInfo();
// 插件授权检查
virtual bool checkLicense() { return true; }
// 插件国际化支持初始化
virtual void initTranslations(){}
};
4、资源管理文件 .qrc
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file>
</qresource>
</RCC>
二、在解决方案中添加项目
扩展-Qt VS Tools-打开Qt项目文件-打开pro文件,在项目管理器可以看到自动添加了项目,相应包含了相关的源文件资源文件等;
调试,帮助-关于,可以看到插件部分生成了相应信息,成功添加;