QCAD-bővítmény létrehozása
Bevezetés
Szekció neve “Bevezetés”A QCAD-bővítmények a QCAD C-ben vagy C++-ban implementált funkcionalitással való kiterjesztésére használhatók.
Az RPluginInterface implementálása
Szekció neve “Az RPluginInterface implementálása”Minden QCAD-bővítménynek közvetlenül vagy közvetve a QObject-ből és az absztrakt RPluginInterface alaposztályból kell származnia.
RExamplePlugin.h fájl
Szekció neve “RExamplePlugin.h fájl”Az első, minimalista példabővítményünkhöz az RPluginInterface legtöbb metódusához üres vagy minimalista implementációkat adunk közvetlenül a fejlécfájlhoz. A fejlécfájl ezen kezdeti szerkezete átmásolható egy első működő bővítmény megszerzéséhez, amely betölthető a QCAD-be.
#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; }};RExamplePlugin.cpp fájl
Szekció neve “RExamplePlugin.cpp fájl”A getPluginInfo metódushoz egy egyszerű implementációt adunk a cpp fájlhoz, hogy lássunk valamit a QCAD névjegy párbeszédpaneljén.
#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#endifexampleplugin.pro fájl
Szekció neve “exampleplugin.pro fájl”A bővítményünk lefordításához szükségünk van egy Qt projektfájlra is, amely a Qt qmake segítségével Makefile-lá alakítható.
CONFIG += pluginTARGET = exampleinclude(../../../shared.pri)
TEMPLATE = libHEADERS = RExamplePlugin.hSOURCES = RExamplePlugin.cppDESTDIR = ../../../pluginsLIBS += -lqcadcore -lqcadgui -lqcadecmaapiA 3. sorban lévő include-nak a QCAD forráskód-telepítés shared.pri fájljára kell mutatnia (pl. qcad/shared.pri). DESTDIR-ként érdemes egy működő QCAD-telepítés plugins mappáját választani, hogy a bővítmény a megfelelő helyre forduljon, ahonnan a QCAD is betöltheti.
Fordítás
Szekció neve “Fordítás”A bővítménye ezzel a három fájllal lefordítható, létrehozva a qcad/plugins/qcadexample.dll vagy libqcadexample.so vagy libqcadexample.dylib fájlt.
Megjegyzés: ha hibakeresési (debug) módban lefordított QCAD bináris fájlt futtat, a bővítményt is hibakeresési módban kell lefordítani. Ha a QCAD-et release módban futtatja, a bővítményt is release módban kell lefordítani.
A bővítmény hibakeresési módban való lefordításához futtassa:
Linux / macOS:
qmakemake debugWindows:
qmakenmake debugRelease módban való fordításhoz ehelyett a make release vagy nmake release parancsot futtassa.
Nyilvánvaló, hogy a bővítmény még nem csinál semmi hasznosat, de látnia kell a bővítményét a QCAD névjegy párbeszédpaneljén:
Ha nem látja a bővítményét, kérjük, ellenőrizze a hibákat a terminálban a QCAD indításakor. Előfordulhat, hogy hibaüzenetet is lát a névjegy párbeszédpanelen.
Szkriptek erőforrásként való fordítása egy bővítménybe
Szekció neve “Szkriptek erőforrásként való fordítása egy bővítménybe”A QCAD-bővítmények szkriptek és egyéb erőforrások (ui fájlok, ikonok stb.) gyűjteményének egy bővítménybe való fordítására használhatók. Ennek az az előnye, hogy több ECMAScript-fájl kódja egyetlen, lefordított bináris fájlba csomagolható. A bővítmények általában gyorsabban töltődnek be, mint az egyes fájlok a lemezről, és kevesebb lemezterületet foglalnak el.
scripts/MyTool/MyTool.js fájl
Szekció neve “scripts/MyTool/MyTool.js fájl”Tegyük fel, hogy van egy scripts/MyTool mappa egy MyTool.js fájllal, amely egy ECMAScriptben implementált QCAD-eszközt tartalmaz. Az eszköz hozzáadja magát a Egyéb menü tetejéhez, és kiírja a “Hello World” szöveget, amikor aktiválják.
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"]);};scripts.qrc fájl
Szekció neve “scripts.qrc fájl”Ahhoz, hogy ezt a szkripteszközt a C++ bővítményünkbe fordítsuk, létre kell hoznunk egy Qt erőforrásfájlt, amely a qmake-et a bővítménybe fordítani kívánt fájlra irányítja:
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file> </qresource></RCC>A qrc fájl felsorolja azokat az útvonalakat, amelyek alatt az erőforrásokat elérhetővé kell tenni a Qt erőforrásrendszerében (alias=“scripts/MyTool/MyTool.js”), és a tényleges útvonalat, ahol a fájl megtalálható a lemezen (csak fordításhoz használatos). A fenti példa azt jelenti, hogy van egy fájl a lemezen a scripts/MyTool/MyTool.js alatt, amelyet a bővítménybe fordítanak. Amint a bővítmény betöltődik, a fájl elérhető lesz a “:/scripts/MyTool/MyTool.js” útvonal alatt. A QCAD automatikusan megtalálja az eszközt ezen az útvonalon, mivel a “scripts” mappát, valamint a “:/scripts” útvonalat is átvizsgálja szkriptek után.
A qrc fájlt hozzá kell adnunk a projektfájlhoz (exampleplugin.pro) is a következő sor hozzáadásával:
RESOURCES = scripts.qrcAz exampleplugin.pro fájl szerkesztése után futtassa újra a qmake és a make parancsot, és töltse be a bővítményt. Most már kell lennie egy “MyTool” menüpontnak a QCAD Egyéb menüjének tetején.
Forráskód
Szekció neve “Forráskód”A teljes forráskódot ehhez a példabővítményhez a következő helyen találja:
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
Hibaelhárítás
Szekció neve “Hibaelhárítás”- Ha a bővítménye lefordul, de a QCAD nem tudja betölteni, kérjük, győződjön meg róla, hogy ugyanaz a Qt verzió van használatban, mint a QCAD-hez (lásd Súgó > A QCAD névjegye). Kérjük, győződjön meg róla, hogy ha a QCAD release módban fut, a bővítménye is release módban van lefordítva.
- Indítsa el a QCAD-et egy terminálból vagy a parancssorból, és ellenőrizze a konzol kimenetét hibaüzenetekért. Írjon ki üzeneteket a bővítményében annak megerősítésére, hogy betöltődik. Például az init függvényében.
- Ellenőrizze a névjegy párbeszédpanelt (Súgó > A QCAD névjegye > Bővítmények) hibaüzenetekért.