Crearea unui plugin QCAD
Introducere
Section titled “Introducere”Plugin-urile QCAD pot fi utilizate pentru a extinde QCAD cu funcționalitate implementată în C sau C++.
Implementarea RPluginInterface
Section titled “Implementarea RPluginInterface”Toate plugin-urile QCAD trebuie să fie derivate direct sau indirect din QObject și din clasa de bază abstractă RPluginInterface.
Fișier RExamplePlugin.h
Section titled “Fișier RExamplePlugin.h”Pentru primul nostru plugin exemplu, minimalist, adăugăm implementări goale sau minimaliste pentru majoritatea metodelor RPluginInterface direct în fișierul antet. Această structură inițială a fișierului antet poate fi copiată pentru a obține un prim plugin funcțional care poate fi încărcat în 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; }};Fișier RExamplePlugin.cpp
Section titled “Fișier RExamplePlugin.cpp”Pentru metoda getPluginInfo, adăugăm o implementare simplă la fișierul cpp pentru a vedea ceva în dialogul „Despre” al 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#endifFișier exampleplugin.pro
Section titled “Fișier exampleplugin.pro”Pentru a compila plugin-ul nostru, avem nevoie și de un fișier de proiect Qt care poate fi transformat într-un Makefile cu Qt qmake.
CONFIG += pluginTARGET = exampleinclude(../../../shared.pri)
TEMPLATE = libHEADERS = RExamplePlugin.hSOURCES = RExamplePlugin.cppDESTDIR = ../../../pluginsLIBS += -lqcadcore -lqcadgui -lqcadecmaapiIncluderea de pe linia 3 ar trebui să indice fișierul shared.pri al instalării codului sursă QCAD (de ex. qcad/shared.pri). Ca DESTDIR, ați putea dori să alegeți folderul plugins al unei instalări QCAD funcționale, astfel încât plugin-ul să fie compilat în locul potrivit, de unde poate fi și încărcat de QCAD.
Compilare
Section titled “Compilare”Plugin-ul dvs. poate fi compilat cu aceste trei fișiere, creând fișierul qcad/plugins/qcadexample.dll sau libqcadexample.so sau libqcadexample.dylib.
Notă: dacă rulați un binar QCAD compilat în mod de depanare (debug), plugin-ul trebuie de asemenea compilat în mod de depanare. Dacă rulați QCAD în mod release, plugin-ul trebuie compilat de asemenea în mod release.
Pentru a compila plugin-ul în mod de depanare, rulați:
Linux / macOS:
qmakemake debugWindows:
qmakenmake debugPentru a compila în mod release, rulați în schimb make release sau nmake release.
Evident, plugin-ul nu va face încă nimic util, dar ar trebui să puteți vedea plugin-ul dvs. în dialogul „Despre” al QCAD:
Dacă nu puteți vedea plugin-ul dvs., verificați erorile din terminal în timp ce porniți QCAD. Este posibil să vedeți de asemenea un mesaj de eroare în dialogul „Despre”.
Compilarea scripturilor ca resurse într-un plugin
Section titled “Compilarea scripturilor ca resurse într-un plugin”Plugin-urile QCAD pot fi utilizate pentru a compila o colecție de scripturi și alte resurse (fișiere ui, pictograme etc.) într-un plugin. Acest lucru are avantajul că codul mai multor fișiere ECMAScript poate fi grupat într-un singur fișier binar compilat. Plugin-urile tind să se încarce mai rapid decât fișierele individuale de pe disc și ocupă mai puțin spațiu pe disc.
Fișier scripts/MyTool/MyTool.js
Section titled “Fișier scripts/MyTool/MyTool.js”Să presupunem că există un folder scripts/MyTool cu un fișier MyTool.js care conține un instrument QCAD, implementat în ECMAScript. Instrumentul se adaugă în partea de sus a meniului Diverse și afișează „Hello World” când este declanșat.
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"]);};Fișier scripts.qrc
Section titled “Fișier scripts.qrc”Pentru a compila acest instrument de script în plugin-ul nostru C++, trebuie să creăm un fișier de resurse Qt care indică qmake fișierul pe care dorim să îl compilăm în plugin:
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file> </qresource></RCC>Fișierul qrc listează căile sub care resursele trebuie făcute disponibile în sistemul de resurse Qt (alias=“scripts/MyTool/MyTool.js”) și calea reală unde poate fi găsit fișierul pe disc (utilizată doar pentru compilare). Exemplul de mai sus înseamnă că există un fișier pe disc sub scripts/MyTool/MyTool.js care va fi compilat în plugin. Imediat ce plugin-ul este încărcat, fișierul va fi disponibil sub calea “:/scripts/MyTool/MyTool.js”. QCAD va găsi instrumentul automat sub acea cale, deoarece scanează folderul „scripts” precum și “:/scripts” pentru scripturi.
Trebuie de asemenea să adăugăm fișierul qrc la fișierul de proiect (exampleplugin.pro) adăugând următoarea linie:
RESOURCES = scripts.qrcDupă editarea fișierului exampleplugin.pro, rulați din nou qmake și make și încărcați plugin-ul. Ar trebui să existe acum o intrare de meniu „MyTool” în partea de sus a meniului Diverse din QCAD.
Cod sursă
Section titled “Cod sursă”Puteți găsi codul sursă complet pentru acest plugin exemplu la:
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
Depanare
Section titled “Depanare”- Dacă plugin-ul dvs. se compilează, dar nu poate fi încărcat de QCAD, asigurați-vă că se utilizează aceeași versiune Qt ca pentru QCAD (vedeți Ajutor > Despre QCAD). Asigurați-vă că, dacă QCAD este rulat în mod release, plugin-ul dvs. este de asemenea compilat în mod release.
- Lansați QCAD dintr-un terminal sau din linia de comandă și verificați ieșirea consolei pentru mesaje de eroare. Afișați mesaje în plugin-ul dvs. pentru a confirma că este încărcat. De exemplu în funcția init.
- Verificați dialogul „Despre” (Ajutor > Despre QCAD > Plugin-uri) pentru mesaje de eroare.