Tworzenie wtyczki QCAD
Wprowadzenie
Dział zatytułowany „Wprowadzenie”Wtyczki QCAD mogą być używane do rozszerzania QCAD o funkcjonalność zaimplementowaną w C lub C++.
Implementowanie RPluginInterface
Dział zatytułowany „Implementowanie RPluginInterface”Wszystkie wtyczki QCAD muszą być bezpośrednio lub pośrednio wyprowadzone z QObject i abstrakcyjnej klasy bazowej RPluginInterface.
Plik RExamplePlugin.h
Dział zatytułowany „Plik RExamplePlugin.h”Dla naszej pierwszej, minimalistycznej przykładowej wtyczki dodajemy puste lub minimalistyczne implementacje dla większości metod RPluginInterface bezpośrednio do pliku nagłówkowego. Tę początkową strukturę pliku nagłówkowego można skopiować, aby uzyskać pierwszą działającą wtyczkę, którą można załadować do 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; }};Plik RExamplePlugin.cpp
Dział zatytułowany „Plik RExamplePlugin.cpp”Dla metody getPluginInfo dodajemy prostą implementację do pliku cpp, aby zobaczyć coś w oknie dialogowym „O programie” QCAD.
#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#endifPlik exampleplugin.pro
Dział zatytułowany „Plik exampleplugin.pro”Aby skompilować naszą wtyczkę, potrzebujemy również pliku projektu Qt, który można zamienić na plik Makefile za pomocą Qt qmake.
CONFIG += pluginTARGET = exampleinclude(../../../shared.pri)
TEMPLATE = libHEADERS = RExamplePlugin.hSOURCES = RExamplePlugin.cppDESTDIR = ../../../pluginsLIBS += -lqcadcore -lqcadgui -lqcadecmaapiDołączenie w wierszu 3 powinno wskazywać na plik shared.pri instalacji kodu źródłowego QCAD (np. qcad/shared.pri). Jako DESTDIR możesz chcieć wybrać folder plugins działającej instalacji QCAD, aby wtyczka została skompilowana we właściwym miejscu, z którego może być również ładowana przez QCAD.
Kompilacja
Dział zatytułowany „Kompilacja”Twoją wtyczkę można skompilować za pomocą tych trzech plików, tworząc plik qcad/plugins/qcadexample.dll lub libqcadexample.so lub libqcadexample.dylib.
Uwaga: jeśli uruchamiasz plik binarny QCAD skompilowany w trybie debugowania, wtyczka również musi być skompilowana w trybie debugowania. Jeśli uruchamiasz QCAD w trybie release, wtyczka również musi być skompilowana w trybie release.
Aby skompilować wtyczkę w trybie debugowania, uruchom:
Linux / macOS:
qmakemake debugWindows:
qmakenmake debugAby skompilować w trybie release, uruchom zamiast tego make release lub nmake release.
Oczywiście wtyczka nie będzie jeszcze robić nic użytecznego, ale powinieneś móc zobaczyć swoją wtyczkę w oknie dialogowym „O programie” QCAD:
Jeśli nie widzisz swojej wtyczki, sprawdź błędy w terminalu podczas uruchamiania QCAD. Możesz również zobaczyć komunikat o błędzie w oknie dialogowym „O programie”.
Kompilowanie skryptów jako zasobów do wtyczki
Dział zatytułowany „Kompilowanie skryptów jako zasobów do wtyczki”Wtyczki QCAD mogą być używane do kompilowania kolekcji skryptów i innych zasobów (plików ui, ikon itp.) do wtyczki. Ma to tę zaletę, że kod wielu plików ECMAScript można spakować w jednym, skompilowanym pliku binarnym. Wtyczki zwykle ładują się szybciej niż pojedyncze pliki z dysku i zajmują mniej miejsca na dysku.
Plik scripts/MyTool/MyTool.js
Dział zatytułowany „Plik scripts/MyTool/MyTool.js”Załóżmy, że istnieje folder scripts/MyTool z plikiem MyTool.js, który zawiera narzędzie QCAD zaimplementowane w ECMAScript. Narzędzie dodaje się na górze menu Różne i wyświetla „Hello World” po uruchomieniu.
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"]);};Plik scripts.qrc
Dział zatytułowany „Plik scripts.qrc”Aby skompilować to narzędzie skryptowe do naszej wtyczki C++, musimy utworzyć plik zasobów Qt, który wskazuje qmake plik, który chcemy skompilować do wtyczki:
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file> </qresource></RCC>Plik qrc wymienia ścieżki, pod którymi zasoby mają być udostępnione w systemie zasobów Qt (alias=“scripts/MyTool/MyTool.js”), oraz rzeczywistą ścieżkę, gdzie plik można znaleźć na dysku (używaną tylko do kompilacji). Powyższy przykład oznacza, że na dysku istnieje plik pod scripts/MyTool/MyTool.js, który zostanie skompilowany do wtyczki. Gdy tylko wtyczka zostanie załadowana, plik będzie dostępny pod ścieżką “:/scripts/MyTool/MyTool.js”. QCAD znajdzie narzędzie automatycznie pod tą ścieżką, ponieważ skanuje folder „scripts” oraz “:/scripts” w poszukiwaniu skryptów.
Musimy również dodać plik qrc do pliku projektu (exampleplugin.pro), dodając następujący wiersz:
RESOURCES = scripts.qrcPo edycji pliku exampleplugin.pro uruchom ponownie qmake i make oraz załaduj wtyczkę. Teraz na górze menu Różne w QCAD powinien znajdować się wpis menu „MyTool”.
Kod źródłowy
Dział zatytułowany „Kod źródłowy”Kompletny kod źródłowy tej przykładowej wtyczki można znaleźć pod adresem:
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
Rozwiązywanie problemów
Dział zatytułowany „Rozwiązywanie problemów”- Jeśli twoja wtyczka się kompiluje, ale nie może zostać załadowana przez QCAD, upewnij się, że używana jest ta sama wersja Qt co dla QCAD (zobacz Pomoc > O QCAD). Upewnij się, że jeśli QCAD jest uruchamiany w trybie release, twoja wtyczka również jest skompilowana w trybie release.
- Uruchom QCAD z terminala lub wiersza poleceń i sprawdź dane wyjściowe konsoli pod kątem komunikatów o błędach. Wyświetlaj komunikaty w swojej wtyczce, aby potwierdzić, że jest ładowana. Na przykład w funkcji init.
- Sprawdź okno dialogowe „O programie” (Pomoc > O QCAD > Wtyczki) pod kątem komunikatów o błędach.