Skip to content

QCAD-i plugina loomine

QCAD-i pluginaid saab kasutada QCAD-i laiendamiseks C-s või C++-s realiseeritud funktsionaalsusega.

Kõik QCAD-i pluginad peavad olema otseselt või kaudselt tuletatud klassidest QObject ja abstraktsest baasklassist RPluginInterface.

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; }
};

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 < 0x050000
QT_BEGIN_NAMESPACE
Q_EXPORT_PLUGIN2(example, RExamplePlugin)
QT_END_NAMESPACE
#endif

Oma plugina kompileerimiseks vajame ka Qt projektifaili, mille saab Qt qmake’iga Makefile’iks muuta.

CONFIG += plugin
TARGET = example
include(../../../shared.pri)
TEMPLATE = lib
HEADERS = RExamplePlugin.h
SOURCES = RExamplePlugin.cpp
DESTDIR = ../../../plugins
LIBS += -lqcadcore -lqcadgui -lqcadecmaapi

Rea 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.

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:

qmake
make debug

Windows:

qmake
nmake debug

Vä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:

Näidisplugin, mis on loetletud QCAD-i teabedialoogis

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.

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"]);
};

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.qrc

Pä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”.

Selle näidisplugina täieliku lähtekoodi leiate aadressilt:

https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin

  • 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).