QCAD-i plugina loomine
Sissejuhatus
Section titled “Sissejuhatus”QCAD-i pluginaid saab kasutada QCAD-i laiendamiseks C-s või C++-s realiseeritud funktsionaalsusega.
RPluginInterface’i realiseerimine
Section titled “RPluginInterface’i realiseerimine”Kõik QCAD-i pluginad peavad olema otseselt või kaudselt tuletatud klassidest QObject ja abstraktsest baasklassist RPluginInterface.
Fail RExamplePlugin.h
Section titled “Fail RExamplePlugin.h”Meie esimese, minimalistliku näidisplugina jaoks lisame enamiku RPluginInterface’i meetodite tühjad või minimalistlikud realisatsioonid otse päisefaili. Selle päisefaili algstruktuuri saab kopeerida, et saada esimene töötav plugin, mille saab QCAD-i laadida.
#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; }};Fail RExamplePlugin.cpp
Section titled “Fail RExamplePlugin.cpp”Meetodi getPluginInfo jaoks lisame cpp-faili lihtsa realisatsiooni, et QCAD-i teabedialoogis midagi näha oleks.
#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#endifFail exampleplugin.pro
Section titled “Fail exampleplugin.pro”Oma plugina kompileerimiseks vajame ka Qt projektifaili, mille saab Qt qmake’iga Makefile’iks muuta.
CONFIG += pluginTARGET = exampleinclude(../../../shared.pri)
TEMPLATE = libHEADERS = RExamplePlugin.hSOURCES = RExamplePlugin.cppDESTDIR = ../../../pluginsLIBS += -lqcadcore -lqcadgui -lqcadecmaapiRea 3 include peaks osutama QCAD-i lähtekoodi paigalduse failile shared.pri (nt qcad/shared.pri). DESTDIR-iks võiksite valida töötava QCAD-i paigalduse plugins-kausta, nii et plugin kompileeritakse õigesse kohta, kust QCAD saab selle ka laadida.
Kompileerimine
Section titled “Kompileerimine”Teie plugina saab nende kolme failiga kompileerida, luues faili qcad/plugins/qcadexample.dll või libqcadexample.so või libqcadexample.dylib.
Märkus: kui käivitate silumisrežiimis kompileeritud QCAD-i binaari, tuleb ka plugin kompileerida silumisrežiimis. Kui käivitate QCAD-i väljalaskerežiimis, tuleb plugin samuti väljalaskerežiimis kompileerida.
Plugina silumisrežiimis kompileerimiseks käivitage:
Linux / macOS:
qmakemake debugWindows:
qmakenmake debugVäljalaskerežiimis kompileerimiseks käivitage selle asemel make release või nmake release.
Ilmselgelt ei tee plugin veel midagi kasulikku, kuid peaksite oma plugina QCAD-i teabedialoogis nägema:
Kui te oma pluginat ei näe, kontrollige QCAD-i käivitamise ajal terminalis vigu. Samuti võite näha veateadet teabedialoogis.
Skriptide kompileerimine ressurssidena pluginasse
Section titled “Skriptide kompileerimine ressurssidena pluginasse”QCAD-i pluginaid saab kasutada skriptide ja muude ressursside (ui-failid, ikoonid jne) kogu kompileerimiseks pluginasse. Sellel on eelis, et mitme ECMAScripti faili koodi saab koondada ühte kompileeritud binaarfaili. Pluginad kipuvad laadima kiiremini kui üksikud failid kettalt ja võtavad vähem kettaruumi.
Fail scripts/MyTool/MyTool.js
Section titled “Fail scripts/MyTool/MyTool.js”Oletame, et on kaust scripts/MyTool failiga MyTool.js, mis sisaldab ECMAScriptis realiseeritud QCAD-i tööriista. Tööriist lisab end menüü Muu ülaossa ja väljastab käivitamisel “Hello World”.
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"]);};Fail scripts.qrc
Section titled “Fail scripts.qrc”Selle skriptitööriista kompileerimiseks meie C++ pluginasse peame looma Qt ressursifaili, mis osutab qmake’ile faili, mille tahame pluginasse kompileerida:
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file> </qresource></RCC>qrc-fail loetleb teed, mille all ressursid tehakse kättesaadavaks Qt ressursisüsteemis (alias=“scripts/MyTool/MyTool.js”), ja tegeliku tee, kust fail kettalt leida (kasutatakse ainult kompileerimiseks). Ülalolev näide tähendab, et kettal on fail asukohas scripts/MyTool/MyTool.js, mis kompileeritakse pluginasse. Niipea kui plugin on laaditud, on fail saadaval tee “:/scripts/MyTool/MyTool.js” all. QCAD leiab tööriista automaatselt selle tee alt, kuna see skannib skriptide otsimiseks nii kausta “scripts” kui ka “:/scripts”.
Samuti peame lisama qrc-faili projektifaili (exampleplugin.pro), lisades järgmise rea:
RESOURCES = scripts.qrcPärast faili exampleplugin.pro redigeerimist käivitage qmake ja make uuesti ning laadige plugin. Nüüd peaks QCAD-i menüü Muu ülaosas olema menüükirje “MyTool”.
Lähtekood
Section titled “Lähtekood”Selle näidisplugina täieliku lähtekoodi leiate aadressilt:
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
Tõrkeotsing
Section titled “Tõrkeotsing”- Kui teie plugin kompileerub, kuid QCAD ei suuda seda laadida, veenduge, et kasutatakse sama Qt versiooni nagu QCAD-i puhul (vt Abi > QCAD-ist). Veenduge, et kui QCAD töötab väljalaskerežiimis, on ka teie plugin kompileeritud väljalaskerežiimis.
- Käivitage QCAD terminalist või käsurealt ja kontrollige konsooli väljundit veateadete suhtes. Väljastage oma pluginas teateid, et kinnitada selle laadimist. Näiteks oma init-funktsioonis.
- Kontrollige veateadete suhtes teabedialoogi (Abi > QCAD-ist > Pluginad).