Stvaranje QCAD dodatka
QCAD dodaci mogu se koristiti za proširenje QCAD-a funkcionalnošću implementiranom u jeziku C ili C++.
Implementacija sučelja RPluginInterface
Section titled “Implementacija sučelja RPluginInterface”Svi QCAD dodaci moraju biti izravno ili neizravno izvedeni iz QObject i apstraktne osnovne klase RPluginInterface.
Datoteka RExamplePlugin.h
Section titled “Datoteka RExamplePlugin.h”Za naš prvi, minimalistički primjer dodatka dodajemo prazne ili minimalističke implementacije za većinu metoda sučelja RPluginInterface izravno u datoteku zaglavlja. Ova početna struktura datoteke zaglavlja može se kopirati kako bi se dobio prvi funkcionalni dodatak koji se može učitati u 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 metodu getPluginInfo dodajemo jednostavnu implementaciju u cpp datoteku kako bismo nešto vidjeli u dijalogu o programu 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 prevođenje našeg dodatka potrebna nam je i Qt projektna datoteka koja se pomoću Qt qmake može pretvoriti u Makefile.
CONFIG += pluginTARGET = exampleinclude(../../../shared.pri)
TEMPLATE = libHEADERS = RExamplePlugin.hSOURCES = RExamplePlugin.cppDESTDIR = ../../../pluginsLIBS += -lqcadcore -lqcadgui -lqcadecmaapiUključivanje u retku 3 treba upućivati na datoteku shared.pri instalacije izvornog koda QCAD-a (npr. qcad/shared.pri). Kao DESTDIR možda ćete htjeti odabrati mapu plugins radne QCAD instalacije, tako da se dodatak prevede na pravo mjesto s kojeg ga QCAD može i učitati.
Prevođenje
Section titled “Prevođenje”Vaš dodatak može se prevesti pomoću ove tri datoteke, stvarajući datoteku qcad/plugins/qcadexample.dll ili libqcadexample.so ili libqcadexample.dylib.
Napomena: ako pokrećete QCAD binarnu datoteku prevedenu u načinu za ispravljanje pogrešaka (debug), dodatak također mora biti preveden u istom načinu. Ako pokrećete QCAD u načinu izdanja (release), dodatak također mora biti preveden u načinu izdanja.
Za prevođenje dodatka u načinu za ispravljanje pogrešaka pokrenite:
Linux / macOS:
qmakemake debugWindows:
qmakenmake debugZa prevođenje u načinu izdanja umjesto toga pokrenite make release ili nmake release.
Očito, dodatak još neće raditi ništa korisno, ali biste trebali moći vidjeti svoj dodatak u dijalogu o programu QCAD:
Ako ne možete vidjeti svoj dodatak, provjerite ima li pogrešaka u terminalu prilikom pokretanja QCAD-a. Možda ćete vidjeti i poruku o pogrešci u dijalogu o programu.
Prevođenje skripti kao resursa u dodatak
Section titled “Prevođenje skripti kao resursa u dodatak”QCAD dodaci mogu se koristiti za prevođenje zbirke skripti i drugih resursa (ui datoteke, ikone itd.) u dodatak. To ima prednost da se kod više ECMAScript datoteka može objediniti unutar jedne, prevedene binarne datoteke. Dodaci se obično učitavaju brže od pojedinačnih datoteka s diska i zauzimaju manje prostora na disku.
Datoteka scripts/MyTool/MyTool.js
Section titled “Datoteka scripts/MyTool/MyTool.js”Pretpostavimo da postoji mapa scripts/MyTool s datotekom MyTool.js koja sadrži QCAD alat implementiran u ECMAScriptu. Alat se dodaje na vrh izbornika Razno i ispisuje “Hello World” kada se pokrene.
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 prevođenje ovog skriptnog alata u naš C++ dodatak, moramo stvoriti Qt datoteku resursa koja upućuje qmake na datoteku koju želimo prevesti u dodatak:
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file> </qresource></RCC>Datoteka qrc navodi putanje pod kojima će resursi biti dostupni u Qt sustavu resursa (alias=“scripts/MyTool/MyTool.js”) i stvarnu putanju gdje se datoteka može pronaći na disku (koristi se samo za prevođenje). Gornji primjer znači da na disku postoji datoteka pod scripts/MyTool/MyTool.js koja će biti prevedena u dodatak. Čim se dodatak učita, datoteka će biti dostupna pod putanjom “:/scripts/MyTool/MyTool.js”. QCAD će automatski pronaći alat pod tom putanjom jer pretražuje mapu “scripts” kao i “:/scripts” za skriptama.
Također moramo dodati qrc datoteku u projektnu datoteku (exampleplugin.pro) dodavanjem sljedećeg retka:
RESOURCES = scripts.qrcNakon uređivanja datoteke exampleplugin.pro, ponovno pokrenite qmake i make te učitajte dodatak. Sada bi na vrhu izbornika Razno u QCAD-u trebala postojati stavka izbornika “MyTool”.
Izvorni kod
Section titled “Izvorni kod”Potpuni izvorni kod za ovaj primjer dodatka možete pronaći na:
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
Rješavanje problema
Section titled “Rješavanje problema”- Ako se vaš dodatak prevodi, ali ga QCAD ne može učitati, provjerite koristi li se ista verzija Qt-a kao za QCAD (pogledajte Pomoć > O programu QCAD). Provjerite je li vaš dodatak, ako se QCAD pokreće u načinu izdanja, također preveden u načinu izdanja.
- Pokrenite QCAD iz terminala ili naredbenog retka i provjerite izlaz konzole za poruke o pogreškama. Ispišite poruke u svom dodatku kako biste potvrdili da se učitava. Na primjer, u funkciji init.
- Provjerite ima li poruka o pogreškama u dijalogu o programu (Pomoć > O programu QCAD > Dodaci).