QCAD papildinio kūrimas
Įvadas
Section titled “Įvadas”QCAD papildinius galima naudoti QCAD išplėsti funkcionalumu, įgyvendintu C arba C++ kalba.
RPluginInterface įgyvendinimas
Section titled “RPluginInterface įgyvendinimas”Visi QCAD papildiniai turi būti tiesiogiai arba netiesiogiai išvesti iš QObject ir abstrakčios bazinės klasės RPluginInterface.
Failas RExamplePlugin.h
Section titled “Failas RExamplePlugin.h”Pirmajam, minimalistiniam pavyzdiniam papildiniui daugumos RPluginInterface metodų tuščius arba minimalistinius įgyvendinimus pridedame tiesiai į antraštės failą. Šią pradinę antraštės failo struktūrą galima nukopijuoti, kad gautumėte pirmąjį veikiantį papildinį, kurį galima įkelti į 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; }};Failas RExamplePlugin.cpp
Section titled “Failas RExamplePlugin.cpp”Metodui getPluginInfo į cpp failą pridedame paprastą įgyvendinimą, kad galėtume kai ką pamatyti QCAD dialogo lange „Apie”.
#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#endifFailas exampleplugin.pro
Section titled “Failas exampleplugin.pro”Kad sukompiliuotume savo papildinį, taip pat reikia Qt projekto failo, kurį su Qt qmake galima paversti Makefile.
CONFIG += pluginTARGET = exampleinclude(../../../shared.pri)
TEMPLATE = libHEADERS = RExamplePlugin.hSOURCES = RExamplePlugin.cppDESTDIR = ../../../pluginsLIBS += -lqcadcore -lqcadgui -lqcadecmaapi3 eilutėje esantis include turėtų nurodyti QCAD pradinio kodo diegimo failą shared.pri (pvz., qcad/shared.pri). Kaip DESTDIR galbūt norėsite pasirinkti veikiančios QCAD diegimo aplanką plugins, kad papildinys būtų sukompiliuotas tinkamoje vietoje, iš kur jį taip pat galės įkelti QCAD.
Kompiliavimas
Section titled “Kompiliavimas”Jūsų papildinį galima sukompiliuoti su šiais trimis failais, sukuriant failą qcad/plugins/qcadexample.dll arba libqcadexample.so, arba libqcadexample.dylib.
Pastaba: jei paleidžiate QCAD dvejetainį failą, sukompiliuotą derinimo (debug) režimu, papildinys taip pat turi būti sukompiliuotas derinimo režimu. Jei paleidžiate QCAD leidimo (release) režimu, papildinys taip pat turi būti sukompiliuotas leidimo režimu.
Norėdami sukompiliuoti papildinį derinimo režimu, paleiskite:
Linux / macOS:
qmakemake debugWindows:
qmakenmake debugNorėdami kompiliuoti leidimo režimu, vietoj to paleiskite make release arba nmake release.
Akivaizdu, kad papildinys dar nedarys nieko naudingo, tačiau turėtumėte matyti savo papildinį QCAD dialogo lange „Apie”:
Jei nematote savo papildinio, patikrinkite terminale klaidas paleidžiant QCAD. Klaidos pranešimą taip pat galite matyti dialogo lange „Apie”.
Scenarijų kompiliavimas kaip išteklių į papildinį
Section titled “Scenarijų kompiliavimas kaip išteklių į papildinį”QCAD papildinius galima naudoti scenarijų ir kitų išteklių (ui failų, piktogramų ir kt.) rinkiniui sukompiliuoti į papildinį. Tai turi pranašumą, kad kelių ECMAScript failų kodą galima sujungti į vieną sukompiliuotą dvejetainį failą. Papildiniai paprastai įkeliami greičiau nei atskiri failai iš disko ir užima mažiau vietos diske.
Failas scripts/MyTool/MyTool.js
Section titled “Failas scripts/MyTool/MyTool.js”Tarkime, kad yra aplankas scripts/MyTool su failu MyTool.js, kuriame yra QCAD įrankis, įgyvendintas ECMAScript kalba. Įrankis prideda save meniu Įvairūs viršuje ir suaktyvintas išveda „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"]);};Failas scripts.qrc
Section titled “Failas scripts.qrc”Kad sukompiliuotume šį scenarijaus įrankį į savo C++ papildinį, turime sukurti Qt išteklių failą, kuris nukreipia qmake į failą, kurį norime sukompiliuoti į papildinį:
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file> </qresource></RCC>Failas qrc išvardija kelius, kuriuose ištekliai turi būti pasiekiami Qt išteklių sistemoje (alias=“scripts/MyTool/MyTool.js”), ir faktinį kelią, kur failą galima rasti diske (naudojama tik kompiliavimui). Aukščiau pateiktas pavyzdys reiškia, kad diske yra failas ties scripts/MyTool/MyTool.js, kuris bus sukompiliuotas į papildinį. Vos tik papildinys įkeliamas, failas bus pasiekiamas keliu “:/scripts/MyTool/MyTool.js”. QCAD automatiškai ras įrankį tuo keliu, nes ieškodamas scenarijų nuskaito aplanką „scripts”, taip pat “:/scripts”.
Taip pat turime pridėti qrc failą į projekto failą (exampleplugin.pro), pridėdami šią eilutę:
RESOURCES = scripts.qrcSuredagavę failą exampleplugin.pro, dar kartą paleiskite qmake ir make ir įkelkite papildinį. Dabar QCAD meniu Įvairūs viršuje turėtų būti meniu įrašas „MyTool”.
Pradinis kodas
Section titled “Pradinis kodas”Visą šio pavyzdinio papildinio pradinį kodą galite rasti adresu:
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
Trikčių šalinimas
Section titled “Trikčių šalinimas”- Jei jūsų papildinys kompiliuojasi, bet QCAD negali jo įkelti, įsitikinkite, kad naudojama ta pati Qt versija kaip ir QCAD (žr. Pagalba > Apie QCAD). Įsitikinkite, kad jei QCAD veikia leidimo režimu, jūsų papildinys taip pat sukompiliuotas leidimo režimu.
- Paleiskite QCAD iš terminalo arba komandų eilutės ir patikrinkite konsolės išvestį, ar nėra klaidų pranešimų. Išveskite pranešimus savo papildinyje, kad patvirtintumėte, jog jis įkeliamas. Pavyzdžiui, savo init funkcijoje.
- Patikrinkite dialogo langą „Apie” (Pagalba > Apie QCAD > Papildiniai), ar nėra klaidų pranešimų.