Tovább a tartalomhoz

QCAD-bővítmény létrehozása

A QCAD-bővítmények a QCAD C-ben vagy C++-ban implementált funkcionalitással való kiterjesztésére használhatók.

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.

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

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

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 += plugin
TARGET = example
include(../../../shared.pri)
TEMPLATE = lib
HEADERS = RExamplePlugin.h
SOURCES = RExamplePlugin.cpp
DESTDIR = ../../../plugins
LIBS += -lqcadcore -lqcadgui -lqcadecmaapi

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

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:

qmake
make debug

Windows:

qmake
nmake debug

Release 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:

A példabővítmény a QCAD névjegy párbeszédpaneljén felsorolva

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.

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

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

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

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

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