コンテンツにスキップ

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によって読み込めるようになります。

これら3つのファイルでプラグインをコンパイルでき、ファイル 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の起動時にターミナルにエラーが出ていないか確認してください。バージョン情報ダイアログにエラーメッセージが表示されることもあります。

スクリプトをリソースとしてプラグインにコンパイルする

Section titled “スクリプトをリソースとしてプラグインにコンパイルする”

QCADプラグインを使って、スクリプトやその他のリソース(uiファイル、アイコンなど)のコレクションをプラグインにコンパイルできます。これには、複数のECMAScriptファイルのコードを1つのコンパイル済みバイナリファイルにまとめられるという利点があります。プラグインは、ディスク上の個々のファイルより読み込みが速く、ディスク容量も少なくて済む傾向があります。

scripts/MyToolというフォルダに、ECMAScriptで実装されたQCADツールを含むファイルMyTool.jsがあるとします。このツールは自身をその他メニューの一番上に追加し、実行されると「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について > プラグイン)にエラーメッセージがないか確認してください。