Ustvarjanje vtičnika QCAD
Vtičnike QCAD je mogoče uporabiti za razširitev QCAD s funkcionalnostjo, implementirano v C ali C++.
Implementacija RPluginInterface
Section titled “Implementacija RPluginInterface”Vsi vtičniki QCAD morajo biti neposredno ali posredno izpeljani iz QObject in abstraktnega osnovnega razreda RPluginInterface.
Datoteka RExamplePlugin.h
Section titled “Datoteka RExamplePlugin.h”Za naš prvi, minimalistični primer vtičnika dodamo prazne ali minimalistične implementacije za večino metod RPluginInterface neposredno v glavo datoteke. To začetno strukturo datoteke glave je mogoče kopirati, da dobite prvi delujoč vtičnik, ki ga je mogoče naložiti v 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; }};Datoteka RExamplePlugin.cpp
Section titled “Datoteka RExamplePlugin.cpp”Za metodo getPluginInfo v datoteko cpp dodamo preprosto implementacijo, da lahko nekaj vidimo v pogovornem oknu “O programu” v 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#endifDatoteka exampleplugin.pro
Section titled “Datoteka exampleplugin.pro”Za prevajanje našega vtičnika potrebujemo tudi projektno datoteko Qt, ki jo je mogoče z Qt qmake spremeniti v Makefile.
CONFIG += pluginTARGET = exampleinclude(../../../shared.pri)
TEMPLATE = libHEADERS = RExamplePlugin.hSOURCES = RExamplePlugin.cppDESTDIR = ../../../pluginsLIBS += -lqcadcore -lqcadgui -lqcadecmaapiVključitev v vrstici 3 mora kazati na datoteko shared.pri namestitve izvorne kode QCAD (npr. qcad/shared.pri). Kot DESTDIR boste morda želeli izbrati mapo plugins delujoče namestitve QCAD, tako da se vtičnik prevede na pravem mestu, od koder ga lahko QCAD tudi naloži.
Prevajanje
Section titled “Prevajanje”Vaš vtičnik je mogoče prevesti s temi tremi datotekami, kar ustvari datoteko qcad/plugins/qcadexample.dll ali libqcadexample.so ali libqcadexample.dylib.
Opomba: če zaganjate binarno datoteko QCAD, prevedeno v načinu za razhroščevanje (debug), mora biti tudi vtičnik preveden v načinu za razhroščevanje. Če zaganjate QCAD v načinu release, mora biti tudi vtičnik preveden v načinu release.
Za prevajanje vtičnika v načinu za razhroščevanje zaženite:
Linux / macOS:
qmakemake debugWindows:
qmakenmake debugZa prevajanje v načinu release namesto tega zaženite make release ali nmake release.
Vtičnik seveda še ne bo počel nič uporabnega, vendar bi morali svoj vtičnik videti v pogovornem oknu “O programu” v QCAD:
Če svojega vtičnika ne vidite, preverite napake v terminalu med zagonom QCAD. Sporočilo o napaki lahko vidite tudi v pogovornem oknu “O programu”.
Prevajanje skriptov kot virov v vtičnik
Section titled “Prevajanje skriptov kot virov v vtičnik”Vtičnike QCAD je mogoče uporabiti za prevajanje zbirke skriptov in drugih virov (datotek ui, ikon itd.) v vtičnik. To ima prednost, da je mogoče kodo več datotek ECMAScript združiti znotraj ene same prevedene binarne datoteke. Vtičniki se ponavadi naložijo hitreje kot posamezne datoteke z diska in zavzamejo manj prostora na disku.
Datoteka scripts/MyTool/MyTool.js
Section titled “Datoteka scripts/MyTool/MyTool.js”Predpostavimo, da obstaja mapa scripts/MyTool z datoteko MyTool.js, ki vsebuje orodje QCAD, implementirano v ECMAScript. Orodje se doda na vrh menija Razno in ob sprožitvi izpiše “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"]);};Datoteka scripts.qrc
Section titled “Datoteka scripts.qrc”Za prevajanje tega skriptnega orodja v naš vtičnik C++ moramo ustvariti datoteko virov Qt, ki qmake usmeri na datoteko, ki jo želimo prevesti v vtičnik:
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file> </qresource></RCC>Datoteka qrc navaja poti, pod katerimi naj bodo viri na voljo v sistemu virov Qt (alias=“scripts/MyTool/MyTool.js”), in dejansko pot, kjer je datoteko mogoče najti na disku (uporablja se samo za prevajanje). Zgornji primer pomeni, da na disku pod scripts/MyTool/MyTool.js obstaja datoteka, ki bo prevedena v vtičnik. Takoj ko je vtičnik naložen, bo datoteka na voljo pod potjo “:/scripts/MyTool/MyTool.js”. QCAD bo orodje samodejno našel pod to potjo, saj za skripte pregleduje mapo “scripts” in tudi “:/scripts”.
Datoteko qrc moramo dodati tudi v projektno datoteko (exampleplugin.pro) z dodajanjem naslednje vrstice:
RESOURCES = scripts.qrcPo urejanju datoteke exampleplugin.pro znova zaženite qmake in make ter naložite vtičnik. Zdaj bi moral biti na vrhu menija Razno v QCAD vnos menija “MyTool”.
Izvorna koda
Section titled “Izvorna koda”Celotno izvorno kodo za ta primer vtičnika najdete na:
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
Odpravljanje težav
Section titled “Odpravljanje težav”- Če se vaš vtičnik prevede, vendar ga QCAD ne more naložiti, se prepričajte, da je uporabljena enaka različica Qt kot za QCAD (glejte Pomoč > O programu QCAD). Prepričajte se, da je, če se QCAD zaganja v načinu release, vaš vtičnik prav tako preveden v načinu release.
- Zaženite QCAD iz terminala ali ukazne vrstice in preverite izpis konzole za sporočila o napakah. Izpišite sporočila v svojem vtičniku, da potrdite, da se nalaga. Na primer v svoji funkciji init.
- Preverite pogovorno okno “O programu” (Pomoč > O programu QCAD > Vtičniki) za sporočila o napakah.