콘텐츠로 이동

QCAD 플러그인 만들기

QCAD 플러그인은 C 또는 C++로 구현된 기능으로 QCAD를 확장하는 데 사용할 수 있습니다.

모든 QCAD 플러그인은 QObject와 추상 기본 클래스 RPluginInterface에서 직접 또는 간접적으로 파생되어야 합니다.

첫 번째 최소한의 예제 플러그인을 위해 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; }
};

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

플러그인을 컴파일하려면 Qt qmake로 Makefile로 변환할 수 있는 Qt 프로젝트 파일도 필요합니다.

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

3번째 줄의 include는 QCAD 소스 코드 설치의 shared.pri 파일(예: qcad/shared.pri)을 가리켜야 합니다. DESTDIR로는 작동하는 QCAD 설치의 plugins 폴더를 선택하는 것이 좋습니다. 그러면 플러그인이 올바른 위치에 컴파일되어 QCAD에서 로드할 수도 있습니다.

이 세 파일로 플러그인을 컴파일하여 qcad/plugins/qcadexample.dll 또는 libqcadexample.so 또는 libqcadexample.dylib 파일을 만들 수 있습니다.

참고: 디버그 모드로 컴파일된 QCAD 바이너리를 실행하는 경우 플러그인도 디버그 모드로 컴파일해야 합니다. QCAD를 릴리스 모드로 실행하는 경우 플러그인도 릴리스 모드로 컴파일해야 합니다.

플러그인을 디버그 모드로 컴파일하려면 실행하세요:

Linux / macOS:

qmake
make debug

Windows:

qmake
nmake debug

릴리스 모드로 컴파일하려면 대신 make release 또는 nmake release를 실행하세요.

당연히 플러그인은 아직 유용한 작업을 수행하지 않지만 QCAD 정보 대화 상자에서 플러그인을 볼 수 있어야 합니다.

QCAD 정보 대화 상자에 나열된 예제 플러그인

플러그인이 보이지 않으면 QCAD를 시작하는 동안 터미널에서 오류를 확인하세요. 정보 대화 상자에서 오류 메시지가 표시될 수도 있습니다.

스크립트를 리소스로 플러그인에 컴파일하기

섹션 제목: “스크립트를 리소스로 플러그인에 컴파일하기”

QCAD 플러그인은 스크립트 및 기타 리소스(ui 파일, 아이콘 등)의 모음을 플러그인으로 컴파일하는 데 사용할 수 있습니다. 이는 여러 ECMAScript 파일의 코드를 하나의 컴파일된 바이너리 파일 안에 묶을 수 있다는 장점이 있습니다. 플러그인은 디스크의 개별 파일보다 더 빨리 로드되는 경향이 있으며 디스크 공간을 덜 차지합니다.

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

이 스크립트 도구를 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.qrc

exampleplugin.pro 파일을 편집한 후 qmake와 make를 다시 실행하고 플러그인을 로드하세요. 이제 QCAD의 기타 메뉴 상단에 “MyTool” 메뉴 항목이 있어야 합니다.

이 예제 플러그인의 전체 소스 코드는 다음에서 찾을 수 있습니다.

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

  • 플러그인이 컴파일되지만 QCAD에서 로드할 수 없는 경우 QCAD와 동일한 Qt 버전이 사용되는지 확인하세요(도움말 > QCAD 정보 참조). QCAD가 릴리스 모드로 실행되는 경우 플러그인도 릴리스 모드로 컴파일되었는지 확인하세요.
  • 터미널이나 명령줄에서 QCAD를 실행하고 콘솔 출력에서 오류 메시지를 확인하세요. 플러그인에서 메시지를 출력하여 로드되고 있는지 확인하세요. 예를 들어 init 함수에서입니다.
  • 정보 대화 상자(도움말 > QCAD 정보 > 플러그인)에서 오류 메시지를 확인하세요.