QCAD 플러그인 만들기
QCAD 플러그인은 C 또는 C++로 구현된 기능으로 QCAD를 확장하는 데 사용할 수 있습니다.
RPluginInterface 구현
섹션 제목: “RPluginInterface 구현”모든 QCAD 플러그인은 QObject와 추상 기본 클래스 RPluginInterface에서 직접 또는 간접적으로 파생되어야 합니다.
파일 RExamplePlugin.h
섹션 제목: “파일 RExamplePlugin.h”첫 번째 최소한의 예제 플러그인을 위해 RPluginInterface의 대부분의 메서드에 대한 비어 있거나 최소한의 구현을 헤더 파일에 직접 추가합니다. 헤더 파일의 이 초기 구조를 복사하여 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; }};파일 RExamplePlugin.cpp
섹션 제목: “파일 RExamplePlugin.cpp”getPluginInfo 메서드의 경우 QCAD의 정보 대화 상자에서 무언가를 볼 수 있도록 cpp 파일에 간단한 구현을 추가합니다.
#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#endif파일 exampleplugin.pro
섹션 제목: “파일 exampleplugin.pro”플러그인을 컴파일하려면 Qt qmake로 Makefile로 변환할 수 있는 Qt 프로젝트 파일도 필요합니다.
CONFIG += pluginTARGET = exampleinclude(../../../shared.pri)
TEMPLATE = libHEADERS = RExamplePlugin.hSOURCES = RExamplePlugin.cppDESTDIR = ../../../pluginsLIBS += -lqcadcore -lqcadgui -lqcadecmaapi3번째 줄의 include는 QCAD 소스 코드 설치의 shared.pri 파일(예: qcad/shared.pri)을 가리켜야 합니다. DESTDIR로는 작동하는 QCAD 설치의 plugins 폴더를 선택하는 것이 좋습니다. 그러면 플러그인이 올바른 위치에 컴파일되어 QCAD에서 로드할 수도 있습니다.
컴파일
섹션 제목: “컴파일”이 세 파일로 플러그인을 컴파일하여 qcad/plugins/qcadexample.dll 또는 libqcadexample.so 또는 libqcadexample.dylib 파일을 만들 수 있습니다.
참고: 디버그 모드로 컴파일된 QCAD 바이너리를 실행하는 경우 플러그인도 디버그 모드로 컴파일해야 합니다. QCAD를 릴리스 모드로 실행하는 경우 플러그인도 릴리스 모드로 컴파일해야 합니다.
플러그인을 디버그 모드로 컴파일하려면 실행하세요:
Linux / macOS:
qmakemake debugWindows:
qmakenmake debug릴리스 모드로 컴파일하려면 대신 make release 또는 nmake release를 실행하세요.
당연히 플러그인은 아직 유용한 작업을 수행하지 않지만 QCAD 정보 대화 상자에서 플러그인을 볼 수 있어야 합니다.
플러그인이 보이지 않으면 QCAD를 시작하는 동안 터미널에서 오류를 확인하세요. 정보 대화 상자에서 오류 메시지가 표시될 수도 있습니다.
스크립트를 리소스로 플러그인에 컴파일하기
섹션 제목: “스크립트를 리소스로 플러그인에 컴파일하기”QCAD 플러그인은 스크립트 및 기타 리소스(ui 파일, 아이콘 등)의 모음을 플러그인으로 컴파일하는 데 사용할 수 있습니다. 이는 여러 ECMAScript 파일의 코드를 하나의 컴파일된 바이너리 파일 안에 묶을 수 있다는 장점이 있습니다. 플러그인은 디스크의 개별 파일보다 더 빨리 로드되는 경향이 있으며 디스크 공간을 덜 차지합니다.
파일 scripts/MyTool/MyTool.js
섹션 제목: “파일 scripts/MyTool/MyTool.js”ECMAScript로 구현된 QCAD 도구를 포함하는 MyTool.js 파일이 있는 scripts/MyTool 폴더가 있다고 가정해 보겠습니다. 이 도구는 기타 메뉴 상단에 자신을 추가하고 트리거되면 “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"]);};파일 scripts.qrc
섹션 제목: “파일 scripts.qrc”이 스크립트 도구를 C++ 플러그인에 컴파일하려면 플러그인에 컴파일하려는 파일로 qmake를 가리키는 Qt 리소스 파일을 만들어야 합니다.
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file> </qresource></RCC>qrc 파일은 Qt의 리소스 시스템에서 리소스를 사용할 수 있게 할 경로(alias=“scripts/MyTool/MyTool.js”)와 파일을 디스크에서 찾을 수 있는 실제 경로(컴파일에만 사용됨)를 나열합니다. 위의 예는 디스크에 scripts/MyTool/MyTool.js 아래에 파일이 있으며 이 파일이 플러그인에 컴파일됨을 의미합니다. 플러그인이 로드되는 즉시 파일은 “:/scripts/MyTool/MyTool.js” 경로 아래에서 사용할 수 있습니다. QCAD는 “scripts” 폴더와 “:/scripts”를 스크립트에 대해 스캔하므로 해당 경로에서 도구를 자동으로 찾습니다.
또한 다음 줄을 추가하여 qrc 파일을 프로젝트 파일(exampleplugin.pro)에 추가해야 합니다.
RESOURCES = scripts.qrcexampleplugin.pro 파일을 편집한 후 qmake와 make를 다시 실행하고 플러그인을 로드하세요. 이제 QCAD의 기타 메뉴 상단에 “MyTool” 메뉴 항목이 있어야 합니다.
소스 코드
섹션 제목: “소스 코드”이 예제 플러그인의 전체 소스 코드는 다음에서 찾을 수 있습니다.
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
문제 해결
섹션 제목: “문제 해결”- 플러그인이 컴파일되지만 QCAD에서 로드할 수 없는 경우 QCAD와 동일한 Qt 버전이 사용되는지 확인하세요(도움말 > QCAD 정보 참조). QCAD가 릴리스 모드로 실행되는 경우 플러그인도 릴리스 모드로 컴파일되었는지 확인하세요.
- 터미널이나 명령줄에서 QCAD를 실행하고 콘솔 출력에서 오류 메시지를 확인하세요. 플러그인에서 메시지를 출력하여 로드되고 있는지 확인하세요. 예를 들어 init 함수에서입니다.
- 정보 대화 상자(도움말 > QCAD 정보 > 플러그인)에서 오류 메시지를 확인하세요.