Crear un plugin de QCAD
Introducción
Sección titulada «Introducción»Los plugins de QCAD se pueden usar para ampliar QCAD con funcionalidad implementada en C o C++.
Implementar RPluginInterface
Sección titulada «Implementar RPluginInterface»Todos los plugins de QCAD deben derivar directa o indirectamente de QObject y de la clase base abstracta RPluginInterface.
Archivo RExamplePlugin.h
Sección titulada «Archivo RExamplePlugin.h»Para nuestro primer plugin de ejemplo minimalista, añadimos implementaciones vacías o minimalistas para la mayoría de los métodos de RPluginInterface directamente en el archivo de cabecera. Esta estructura inicial del archivo de cabecera se puede copiar para obtener un primer plugin funcional que se pueda cargar en QCAD.
#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 status) {} virtual void initScriptExtensions(QScriptEngine& engine) {} virtual RPluginInfo getPluginInfo(); virtual bool checkLicense() { return true; }};Archivo RExamplePlugin.cpp
Sección titulada «Archivo RExamplePlugin.cpp»Para el método getPluginInfo, añadimos una implementación sencilla al archivo cpp para poder ver algo en el cuadro de diálogo «Acerca de» de QCAD.
#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 < 0x050000QT_BEGIN_NAMESPACEQ_EXPORT_PLUGIN2(example, RExamplePlugin)QT_END_NAMESPACE#endifArchivo exampleplugin.pro
Sección titulada «Archivo exampleplugin.pro»Para compilar nuestro plugin, también necesitamos un archivo de proyecto de Qt que se pueda convertir en un Makefile con Qt qmake.
CONFIG += pluginTARGET = exampleinclude(../../../shared.pri)
TEMPLATE = libHEADERS = RExamplePlugin.hSOURCES = RExamplePlugin.cppDESTDIR = ../../../pluginsLIBS += -lqcadcore -lqcadgui -lqcadecmaapiEl include de la línea 3 debe apuntar al archivo shared.pri de la instalación del código fuente de QCAD (por ejemplo, qcad/shared.pri). Como DESTDIR, quizá desee elegir la carpeta plugins de una instalación de QCAD en funcionamiento, para que el plugin se compile en el lugar correcto, desde donde también pueda ser cargado por QCAD.
Compilación
Sección titulada «Compilación»Su plugin se puede compilar con estos tres archivos, creando el archivo qcad/plugins/qcadexample.dll o libqcadexample.so o libqcadexample.dylib.
Nota: si ejecuta un binario de QCAD compilado en modo debug, el plugin también debe compilarse en modo debug. Si ejecuta QCAD en modo release, el plugin debe compilarse igualmente en modo release.
Para compilar el plugin en modo debug, ejecute:
Linux / macOS:
qmakemake debugWindows:
qmakenmake debugPara compilar en modo release, ejecute make release o nmake release en su lugar.
Obviamente, el plugin todavía no hará nada útil, pero debería poder ver su plugin en el cuadro de diálogo «Acerca de» de QCAD:
Si no ve su plugin, compruebe si hay errores en el terminal al iniciar QCAD. También podría ver un mensaje de error en el cuadro de diálogo «Acerca de».
Compilar scripts como recursos en un plugin
Sección titulada «Compilar scripts como recursos en un plugin»Los plugins de QCAD se pueden usar para compilar una colección de scripts y otros recursos (archivos UI, iconos, etc.) en un plugin. Esto tiene la ventaja de que el código de varios archivos ECMAScript se puede agrupar dentro de un único archivo binario compilado. Los plugins tienden a cargarse más rápido que los archivos individuales del disco y ocupan menos espacio en disco.
Archivo scripts/MyTool/MyTool.js
Sección titulada «Archivo scripts/MyTool/MyTool.js»Supongamos que hay una carpeta scripts/MyTool con un archivo MyTool.js que contiene una herramienta de QCAD implementada en ECMAScript. La herramienta se añade a sí misma en la parte superior del menú Misceláneo y muestra “Hello World” cuando se activa.
include("scripts/EAction.js");
function MyTool(guiAction) { EAction.call(this, guiAction);}
MyTool.prototype = new EAction();
MyTool.prototype.beginEvent = function() { EAction.prototype.beginEvent.call(this);
EAction.handleUserMessage("Hello World");
this.terminate();};
MyTool.init = function(basePath) { var action = new RGuiAction("&MyTool", RMainWindowQt.getMainWindow()); action.setRequiresDocument(true); action.setScriptFile(basePath + "/MyTool.js"); action.setGroupSortOrder(0); action.setSortOrder(0); action.setWidgetNames(["MiscMenu"]);};Archivo scripts.qrc
Sección titulada «Archivo scripts.qrc»Para compilar esta herramienta de script en nuestro plugin de C++, necesitamos crear un archivo de recursos de Qt que indique a qmake el archivo que queremos compilar en el plugin:
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file> </qresource></RCC>El archivo qrc enumera las rutas bajo las cuales los recursos deben estar disponibles en el sistema de recursos de Qt (alias=“scripts/MyTool/MyTool.js”) y la ruta real donde se puede encontrar el archivo en el disco (usada solo para la compilación). El ejemplo anterior significa que hay un archivo en el disco bajo scripts/MyTool/MyTool.js que se compilará en el plugin. En cuanto se cargue el plugin, el archivo estará disponible bajo la ruta “:/scripts/MyTool/MyTool.js”. QCAD encontrará la herramienta automáticamente bajo esa ruta, ya que analiza tanto la carpeta “scripts” como “:/scripts” en busca de scripts.
También necesitamos añadir el archivo qrc al archivo de proyecto (exampleplugin.pro) añadiendo la siguiente línea:
RESOURCES = scripts.qrcTras editar el archivo exampleplugin.pro, ejecute qmake y make de nuevo y cargue el plugin. Ahora debería haber una entrada de menú “MyTool” en la parte superior del menú Misceláneo en QCAD.
Código fuente
Sección titulada «Código fuente»Puede encontrar el código fuente completo de este plugin de ejemplo en:
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
Solución de problemas
Sección titulada «Solución de problemas»- Si su plugin compila pero no puede ser cargado por QCAD, asegúrese de que se usa la misma versión de Qt que para QCAD (consulte Ayuda > Acerca de QCAD). Asegúrese de que, si QCAD se ejecuta en modo release, su plugin también esté compilado en modo release.
- Inicie QCAD desde un terminal o la línea de comandos y compruebe la salida de la consola en busca de mensajes de error. Muestre mensajes en su plugin para confirmar que se está cargando, por ejemplo en su función init.
- Compruebe el cuadro de diálogo «Acerca de» (Ayuda > Acerca de QCAD > Plugins) en busca de mensajes de error.