QCAD spraudņa izveide
Ievads
Section titled “Ievads”QCAD spraudņus var izmantot, lai paplašinātu QCAD ar funkcionalitāti, kas īstenota C vai C++ valodā.
RPluginInterface īstenošana
Section titled “RPluginInterface īstenošana”Visiem QCAD spraudņiem jābūt tieši vai netieši atvasinātiem no QObject un abstraktās bāzes klases RPluginInterface.
Fails RExamplePlugin.h
Section titled “Fails RExamplePlugin.h”Mūsu pirmajam, minimālistiskajam piemēra spraudnim mēs pievienojam tukšas vai minimālistiskas īstenošanas lielākajai daļai RPluginInterface metožu tieši galvenes failā. Šo galvenes faila sākotnējo struktūru var kopēt, lai iegūtu pirmo strādājošo spraudni, ko var ielādēt 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; }};Fails RExamplePlugin.cpp
Section titled “Fails RExamplePlugin.cpp”Metodei getPluginInfo mēs pievienojam vienkāršu īstenošanu cpp failā, lai varētu kaut ko redzēt QCAD dialoglodziņā “Par”.
#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#endifFails exampleplugin.pro
Section titled “Fails exampleplugin.pro”Lai kompilētu mūsu spraudni, mums nepieciešams arī Qt projekta fails, ko ar Qt qmake var pārvērst par Makefile.
CONFIG += pluginTARGET = exampleinclude(../../../shared.pri)
TEMPLATE = libHEADERS = RExamplePlugin.hSOURCES = RExamplePlugin.cppDESTDIR = ../../../pluginsLIBS += -lqcadcore -lqcadgui -lqcadecmaapiIekļaušanai 3. rindā jānorāda uz QCAD pirmkoda instalācijas failu shared.pri (piem., qcad/shared.pri). Kā DESTDIR jūs varētu vēlēties izvēlēties strādājošas QCAD instalācijas mapi plugins, lai spraudnis tiktu kompilēts pareizajā vietā, no kurienes to var arī ielādēt QCAD.
Kompilēšana
Section titled “Kompilēšana”Jūsu spraudni var kompilēt ar šiem trim failiem, izveidojot failu qcad/plugins/qcadexample.dll vai libqcadexample.so, vai libqcadexample.dylib.
Piezīme: ja jūs palaižat QCAD bināro failu, kas kompilēts atkļūdošanas (debug) režīmā, spraudnis arī jākompilē atkļūdošanas režīmā. Ja jūs palaižat QCAD laidiena (release) režīmā, spraudnis arī jākompilē laidiena režīmā.
Lai kompilētu spraudni atkļūdošanas režīmā, palaidiet:
Linux / macOS:
qmakemake debugWindows:
qmakenmake debugLai kompilētu laidiena režīmā, tā vietā palaidiet make release vai nmake release.
Protams, spraudnis vēl nedarīs neko noderīgu, taču jums vajadzētu spēt redzēt savu spraudni QCAD dialoglodziņā “Par”:
Ja neredzat savu spraudni, lūdzu, pārbaudiet kļūdas terminālī, palaižot QCAD. Kļūdas ziņojumu jūs varētu redzēt arī dialoglodziņā “Par”.
Skriptu kompilēšana kā resursu spraudnī
Section titled “Skriptu kompilēšana kā resursu spraudnī”QCAD spraudņus var izmantot, lai kompilētu skriptu un citu resursu (ui failu, ikonu utt.) kolekciju spraudnī. Tam ir priekšrocība, ka vairāku ECMAScript failu kodu var apvienot vienā kompilētā binārā failā. Spraudņi mēdz ielādēties ātrāk nekā atsevišķi faili no diska un aizņem mazāk diska vietas.
Fails scripts/MyTool/MyTool.js
Section titled “Fails scripts/MyTool/MyTool.js”Pieņemsim, ka ir mape scripts/MyTool ar failu MyTool.js, kurā ir QCAD rīks, kas īstenots ECMAScript. Rīks pievieno sevi izvēlnes Dažādi augšpusē un izvada “Hello World”, kad tas tiek aktivizēts.
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"]);};Fails scripts.qrc
Section titled “Fails scripts.qrc”Lai kompilētu šo skripta rīku mūsu C++ spraudnī, mums jāizveido Qt resursu fails, kas norāda qmake uz failu, ko vēlamies kompilēt spraudnī:
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file> </qresource></RCC>Fails qrc uzskaita ceļus, zem kuriem resursiem jābūt pieejamiem Qt resursu sistēmā (alias=“scripts/MyTool/MyTool.js”), un faktisko ceļu, kur failu var atrast diskā (izmanto tikai kompilēšanai). Iepriekš minētais piemērs nozīmē, ka diskā zem scripts/MyTool/MyTool.js ir fails, kas tiks kompilēts spraudnī. Tiklīdz spraudnis tiek ielādēts, fails būs pieejams zem ceļa “:/scripts/MyTool/MyTool.js”. QCAD atradīs rīku automātiski zem šī ceļa, jo tas skenē mapi “scripts”, kā arī “:/scripts”, meklējot skriptus.
Mums arī jāpievieno qrc fails projekta failam (exampleplugin.pro), pievienojot šādu rindu:
RESOURCES = scripts.qrcPēc faila exampleplugin.pro rediģēšanas vēlreiz palaidiet qmake un make un ielādējiet spraudni. Tagad QCAD izvēlnes Dažādi augšpusē vajadzētu būt izvēlnes ierakstam “MyTool”.
Pirmkods
Section titled “Pirmkods”Pilnu šī piemēra spraudņa pirmkodu varat atrast:
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
Problēmu novēršana
Section titled “Problēmu novēršana”- Ja jūsu spraudnis kompilējas, bet QCAD to nevar ielādēt, lūdzu, pārliecinieties, ka tiek izmantota tā pati Qt versija kā QCAD (skatiet Palīdzība > Par QCAD). Lūdzu, pārliecinieties, ka, ja QCAD tiek palaists laidiena režīmā, jūsu spraudnis arī ir kompilēts laidiena režīmā.
- Palaidiet QCAD no termināļa vai komandrindas un pārbaudiet konsoles izvadi, vai nav kļūdu ziņojumu. Izvadiet ziņojumus savā spraudnī, lai apstiprinātu, ka tas tiek ielādēts. Piemēram, savā init funkcijā.
- Pārbaudiet dialoglodziņu “Par” (Palīdzība > Par QCAD > Spraudņi), vai nav kļūdu ziņojumu.