Skip to content

QCAD papildinio kūrimas

QCAD papildinius galima naudoti QCAD išplėsti funkcionalumu, įgyvendintu C arba C++ kalba.

Visi QCAD papildiniai turi būti tiesiogiai arba netiesiogiai išvesti iš QObject ir abstrakčios bazinės klasės RPluginInterface.

Pirmajam, minimalistiniam pavyzdiniam papildiniui daugumos RPluginInterface metodų tuščius arba minimalistinius įgyvendinimus pridedame tiesiai į antraštės failą. Šią pradinę antraštės failo struktūrą galima nukopijuoti, kad gautumėte pirmąjį veikiantį papildinį, kurį galima įkelti į 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; }
};

Metodui getPluginInfo į cpp failą pridedame paprastą įgyvendinimą, kad galėtume kai ką pamatyti QCAD dialogo lange „Apie”.

#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

Kad sukompiliuotume savo papildinį, taip pat reikia Qt projekto failo, kurį su Qt qmake galima paversti Makefile.

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

3 eilutėje esantis include turėtų nurodyti QCAD pradinio kodo diegimo failą shared.pri (pvz., qcad/shared.pri). Kaip DESTDIR galbūt norėsite pasirinkti veikiančios QCAD diegimo aplanką plugins, kad papildinys būtų sukompiliuotas tinkamoje vietoje, iš kur jį taip pat galės įkelti QCAD.

Jūsų papildinį galima sukompiliuoti su šiais trimis failais, sukuriant failą qcad/plugins/qcadexample.dll arba libqcadexample.so, arba libqcadexample.dylib.

Pastaba: jei paleidžiate QCAD dvejetainį failą, sukompiliuotą derinimo (debug) režimu, papildinys taip pat turi būti sukompiliuotas derinimo režimu. Jei paleidžiate QCAD leidimo (release) režimu, papildinys taip pat turi būti sukompiliuotas leidimo režimu.

Norėdami sukompiliuoti papildinį derinimo režimu, paleiskite:

Linux / macOS:

qmake
make debug

Windows:

qmake
nmake debug

Norėdami kompiliuoti leidimo režimu, vietoj to paleiskite make release arba nmake release.

Akivaizdu, kad papildinys dar nedarys nieko naudingo, tačiau turėtumėte matyti savo papildinį QCAD dialogo lange „Apie”:

Pavyzdinis papildinys, nurodytas QCAD dialogo lange 'Apie'

Jei nematote savo papildinio, patikrinkite terminale klaidas paleidžiant QCAD. Klaidos pranešimą taip pat galite matyti dialogo lange „Apie”.

Scenarijų kompiliavimas kaip išteklių į papildinį

Section titled “Scenarijų kompiliavimas kaip išteklių į papildinį”

QCAD papildinius galima naudoti scenarijų ir kitų išteklių (ui failų, piktogramų ir kt.) rinkiniui sukompiliuoti į papildinį. Tai turi pranašumą, kad kelių ECMAScript failų kodą galima sujungti į vieną sukompiliuotą dvejetainį failą. Papildiniai paprastai įkeliami greičiau nei atskiri failai iš disko ir užima mažiau vietos diske.

Tarkime, kad yra aplankas scripts/MyTool su failu MyTool.js, kuriame yra QCAD įrankis, įgyvendintas ECMAScript kalba. Įrankis prideda save meniu Įvairūs viršuje ir suaktyvintas išveda „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"]);
};

Kad sukompiliuotume šį scenarijaus įrankį į savo C++ papildinį, turime sukurti Qt išteklių failą, kuris nukreipia qmake į failą, kurį norime sukompiliuoti į papildinį:

<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file>
</qresource>
</RCC>

Failas qrc išvardija kelius, kuriuose ištekliai turi būti pasiekiami Qt išteklių sistemoje (alias=“scripts/MyTool/MyTool.js”), ir faktinį kelią, kur failą galima rasti diske (naudojama tik kompiliavimui). Aukščiau pateiktas pavyzdys reiškia, kad diske yra failas ties scripts/MyTool/MyTool.js, kuris bus sukompiliuotas į papildinį. Vos tik papildinys įkeliamas, failas bus pasiekiamas keliu “:/scripts/MyTool/MyTool.js”. QCAD automatiškai ras įrankį tuo keliu, nes ieškodamas scenarijų nuskaito aplanką „scripts”, taip pat “:/scripts”.

Taip pat turime pridėti qrc failą į projekto failą (exampleplugin.pro), pridėdami šią eilutę:

RESOURCES = scripts.qrc

Suredagavę failą exampleplugin.pro, dar kartą paleiskite qmake ir make ir įkelkite papildinį. Dabar QCAD meniu Įvairūs viršuje turėtų būti meniu įrašas „MyTool”.

Visą šio pavyzdinio papildinio pradinį kodą galite rasti adresu:

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

  • Jei jūsų papildinys kompiliuojasi, bet QCAD negali jo įkelti, įsitikinkite, kad naudojama ta pati Qt versija kaip ir QCAD (žr. Pagalba > Apie QCAD). Įsitikinkite, kad jei QCAD veikia leidimo režimu, jūsų papildinys taip pat sukompiliuotas leidimo režimu.
  • Paleiskite QCAD iš terminalo arba komandų eilutės ir patikrinkite konsolės išvestį, ar nėra klaidų pranešimų. Išveskite pranešimus savo papildinyje, kad patvirtintumėte, jog jis įkeliamas. Pavyzdžiui, savo init funkcijoje.
  • Patikrinkite dialogo langą „Apie” (Pagalba > Apie QCAD > Papildiniai), ar nėra klaidų pranešimų.