QCADプラグインの作成
QCADプラグインを使うと、CまたはC++で実装した機能でQCADを拡張できます。
RPluginInterfaceの実装
Section titled “RPluginInterfaceの実装”すべてのQCADプラグインは、直接または間接的にQObjectおよび抽象基底クラスRPluginInterfaceから派生する必要があります。
ファイル RExamplePlugin.h
Section titled “ファイル 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
Section titled “ファイル 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
Section titled “ファイル 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によって読み込めるようになります。
これら3つのファイルでプラグインをコンパイルでき、ファイル qcad/plugins/qcadexample.dll、libqcadexample.so、または libqcadexample.dylib が作成されます。
注意: デバッグモードでコンパイルされたQCADバイナリを実行する場合、プラグインもデバッグモードでコンパイルする必要があります。QCADをリリースモードで実行する場合は、プラグインもリリースモードでコンパイルする必要があります。
プラグインをデバッグモードでコンパイルするには、次を実行します。
Linux / macOS:
qmakemake debugWindows:
qmakenmake debugリリースモードでコンパイルするには、代わりに make release または nmake release を実行します。
もちろん、このプラグインはまだ何も有用なことは行いませんが、QCADのバージョン情報ダイアログにプラグインが表示されるはずです。
プラグインが表示されない場合は、QCADの起動時にターミナルにエラーが出ていないか確認してください。バージョン情報ダイアログにエラーメッセージが表示されることもあります。
スクリプトをリソースとしてプラグインにコンパイルする
Section titled “スクリプトをリソースとしてプラグインにコンパイルする”QCADプラグインを使って、スクリプトやその他のリソース(uiファイル、アイコンなど)のコレクションをプラグインにコンパイルできます。これには、複数のECMAScriptファイルのコードを1つのコンパイル済みバイナリファイルにまとめられるという利点があります。プラグインは、ディスク上の個々のファイルより読み込みが速く、ディスク容量も少なくて済む傾向があります。
ファイル scripts/MyTool/MyTool.js
Section titled “ファイル scripts/MyTool/MyTool.js”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"]);};ファイル scripts.qrc
Section titled “ファイル 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.qrcファイルexampleplugin.proを編集したら、再度qmakeとmakeを実行してプラグインを読み込みます。QCADのその他メニューの一番上に、「MyTool」というメニュー項目が表示されるはずです。
ソースコード
Section titled “ソースコード”このサンプルプラグインの完全なソースコードは、以下で見つけることができます。
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
トラブルシューティング
Section titled “トラブルシューティング”- プラグインがコンパイルできてもQCADで読み込めない場合は、QCADと同じQtバージョンが使われていることを確認してください(ヘルプ > QCADについて を参照)。QCADがリリースモードで実行されている場合は、プラグインもリリースモードでコンパイルされていることを確認してください。
- ターミナルまたはコマンドラインからQCADを起動し、コンソール出力にエラーメッセージがないか確認してください。プラグインが読み込まれていることを確認するために、たとえばinit関数でメッセージを出力してみてください。
- バージョン情報ダイアログ(ヘルプ > QCADについて > プラグイン)にエラーメッセージがないか確認してください。