QCAD-liitännäisen luominen
Johdanto
Section titled “Johdanto”QCAD-liitännäisillä voidaan laajentaa QCADia C- tai C++-kielellä toteutetulla toiminnallisuudella.
RPluginInterfacen toteuttaminen
Section titled “RPluginInterfacen toteuttaminen”Kaikki QCAD-liitännäiset on johdettava suoraan tai epäsuorasti QObjectista ja abstraktista kantaluokasta RPluginInterface.
Tiedosto RExamplePlugin.h
Section titled “Tiedosto RExamplePlugin.h”Ensimmäistä, minimalistista esimerkkiliitännäistämme varten lisäämme tyhjät tai minimalistiset toteutukset useimmille RPluginInterfacen metodeille suoraan otsikkotiedostoon. Tämän otsikkotiedoston lähtörakenteen voi kopioida saadakseen ensimmäisen toimivan liitännäisen, joka voidaan ladata QCADiin.
#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; }};Tiedosto RExamplePlugin.cpp
Section titled “Tiedosto RExamplePlugin.cpp”Metodille getPluginInfo lisäämme yksinkertaisen toteutuksen cpp-tiedostoon, jotta näemme jotakin QCADin tietoja-valintaikkunassa.
#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#endifTiedosto exampleplugin.pro
Section titled “Tiedosto exampleplugin.pro”Liitännäisemme kääntämiseksi tarvitsemme myös Qt-projektitiedoston, joka voidaan muuntaa Makefileksi Qt qmake -työkalulla.
CONFIG += pluginTARGET = exampleinclude(../../../shared.pri)
TEMPLATE = libHEADERS = RExamplePlugin.hSOURCES = RExamplePlugin.cppDESTDIR = ../../../pluginsLIBS += -lqcadcore -lqcadgui -lqcadecmaapiRivin 3 include-määrityksen tulisi osoittaa QCADin lähdekoodiasennuksen tiedostoon shared.pri (esim. qcad/shared.pri). DESTDIR-kohteeksi kannattaa valita toimivan QCAD-asennuksen plugins-kansio, jotta liitännäinen käännetään oikeaan paikkaan, josta QCAD voi myös ladata sen.
Kääntäminen
Section titled “Kääntäminen”Liitännäisesi voidaan kääntää näillä kolmella tiedostolla, jolloin syntyy tiedosto qcad/plugins/qcadexample.dll, libqcadexample.so tai libqcadexample.dylib.
Huomaa: jos ajat vianjäljitystilassa (debug) käännettyä QCAD-binaaria, myös liitännäinen on käännettävä vianjäljitystilassa. Jos ajat QCADia julkaisutilassa (release), myös liitännäinen on käännettävä julkaisutilassa.
Kääntääksesi liitännäisen vianjäljitystilassa suorita:
Linux / macOS:
qmakemake debugWindows:
qmakenmake debugKääntääksesi julkaisutilassa suorita sen sijaan make release tai nmake release.
Liitännäinen ei tietenkään vielä tee mitään hyödyllistä, mutta sinun pitäisi nähdä liitännäisesi QCADin tietoja-valintaikkunassa:
Jos et näe liitännäistäsi, tarkista päätteestä virheet QCADia käynnistettäessä. Saatat myös nähdä virheilmoituksen tietoja-valintaikkunassa.
Skriptien kääntäminen resursseiksi liitännäiseen
Section titled “Skriptien kääntäminen resursseiksi liitännäiseen”QCAD-liitännäisiä voidaan käyttää kokoelman skriptejä ja muita resursseja (ui-tiedostoja, kuvakkeita jne.) kääntämiseen liitännäiseen. Tästä on se etu, että useiden ECMAScript-tiedostojen koodi voidaan niputtaa yhteen käännettyyn binaaritiedostoon. Liitännäiset latautuvat yleensä nopeammin kuin yksittäiset tiedostot levyltä ja vievät vähemmän levytilaa.
Tiedosto scripts/MyTool/MyTool.js
Section titled “Tiedosto scripts/MyTool/MyTool.js”Oletetaan, että on olemassa kansio scripts/MyTool, jossa on tiedosto MyTool.js, joka sisältää ECMAScriptillä toteutetun QCAD-työkalun. Työkalu lisää itsensä Sekalaiset-valikon yläosaan ja tulostaa “Hello World” käynnistettäessä.
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"]);};Tiedosto scripts.qrc
Section titled “Tiedosto scripts.qrc”Kääntääksemme tämän skriptityökalun C++-liitännäiseemme meidän on luotava Qt-resurssitiedosto, joka osoittaa qmakelle tiedoston, jonka haluamme kääntää liitännäiseen:
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file> </qresource></RCC>qrc-tiedosto luettelee polut, joiden alla resurssit saatetaan käytettäviksi Qt:n resurssijärjestelmässä (alias=“scripts/MyTool/MyTool.js”), sekä varsinaisen polun, josta tiedosto löytyy levyltä (käytetään vain kääntämiseen). Yllä oleva esimerkki tarkoittaa, että levyllä on tiedosto polussa scripts/MyTool/MyTool.js, joka käännetään liitännäiseen. Heti kun liitännäinen ladataan, tiedosto on käytettävissä polussa “:/scripts/MyTool/MyTool.js”. QCAD löytää työkalun automaattisesti tästä polusta, koska se etsii skriptejä sekä “scripts”- että “:/scripts”-kansiosta.
Meidän on myös lisättävä qrc-tiedosto projektitiedostoon (exampleplugin.pro) lisäämällä seuraava rivi:
RESOURCES = scripts.qrcKun olet muokannut tiedostoa exampleplugin.pro, suorita qmake ja make uudelleen ja lataa liitännäinen. Nyt QCADin Sekalaiset-valikon yläosassa pitäisi olla valikkokohta “MyTool”.
Lähdekoodi
Section titled “Lähdekoodi”Löydät tämän esimerkkiliitännäisen täydellisen lähdekoodin osoitteesta:
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
Vianmääritys
Section titled “Vianmääritys”- Jos liitännäisesi kääntyy mutta QCAD ei voi ladata sitä, varmista, että käytössä on sama Qt-versio kuin QCADilla (katso Ohje > Tietoja QCADista). Varmista, että jos QCAD ajetaan julkaisutilassa, myös liitännäisesi on käännetty julkaisutilassa.
- Käynnistä QCAD päätteestä tai komentoriviltä ja tarkista konsolitulosteesta virheilmoitukset. Tulosta viestejä liitännäisestäsi vahvistaaksesi, että se latautuu. Esimerkiksi init-funktiossasi.
- Tarkista tietoja-valintaikkuna (Ohje > Tietoja QCADista > Liitännäiset) virheilmoitusten varalta.