Skip to content

Membuat Plugin QCAD

Plugin QCAD dapat digunakan untuk memperluas QCAD dengan fungsionalitas yang diimplementasikan dalam C atau C++.

Semua plugin QCAD harus diturunkan secara langsung atau tidak langsung dari QObject dan kelas dasar abstrak RPluginInterface.

Untuk plugin contoh pertama kita yang minimalis, kita menambahkan implementasi kosong atau minimalis untuk sebagian besar metode RPluginInterface langsung ke dalam berkas header. Struktur awal berkas header ini dapat disalin untuk mendapatkan plugin pertama yang berfungsi yang dapat dimuat ke dalam 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; }
};

Untuk metode getPluginInfo, kita menambahkan implementasi sederhana ke berkas cpp agar ada sesuatu yang terlihat di dialog tentang 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 < 0x050000
QT_BEGIN_NAMESPACE
Q_EXPORT_PLUGIN2(example, RExamplePlugin)
QT_END_NAMESPACE
#endif

Untuk mengompilasi plugin kita, kita juga memerlukan berkas proyek Qt yang dapat diubah menjadi Makefile dengan Qt qmake.

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

Include pada baris 3 harus menunjuk ke berkas shared.pri dari instalasi kode sumber QCAD (mis. qcad/shared.pri). Sebagai DESTDIR, Anda mungkin ingin memilih folder plugins dari instalasi QCAD yang berfungsi, sehingga plugin dikompilasi di tempat yang tepat, dari mana ia juga dapat dimuat oleh QCAD.

Plugin Anda dapat dikompilasi dengan ketiga berkas ini, menghasilkan berkas qcad/plugins/qcadexample.dll atau libqcadexample.so atau libqcadexample.dylib.

Catatan: jika Anda menjalankan biner QCAD yang dikompilasi dalam mode debug, plugin juga harus dikompilasi dalam mode debug. Jika Anda menjalankan QCAD dalam mode release, plugin harus dikompilasi dalam mode release juga.

Untuk mengompilasi plugin dalam mode debug, jalankan:

Linux / macOS:

qmake
make debug

Windows:

qmake
nmake debug

Untuk mengompilasi dalam mode release, jalankan make release atau nmake release sebagai gantinya.

Tentu saja, plugin belum melakukan sesuatu yang berguna, tetapi Anda seharusnya dapat melihat plugin Anda di dialog tentang QCAD:

Plugin contoh yang tercantum di dialog tentang QCAD

Jika Anda tidak dapat melihat plugin Anda, harap periksa kesalahan di terminal saat memulai QCAD. Anda mungkin juga melihat pesan kesalahan di dialog tentang.

Mengompilasi Skrip sebagai Sumber Daya ke dalam Plugin

Section titled “Mengompilasi Skrip sebagai Sumber Daya ke dalam Plugin”

Plugin QCAD dapat digunakan untuk mengompilasi sekumpulan skrip dan sumber daya lain (berkas ui, ikon, dll.) ke dalam sebuah plugin. Ini memiliki keuntungan bahwa kode dari beberapa berkas ECMAScript dapat digabungkan ke dalam satu berkas biner terkompilasi. Plugin cenderung dimuat lebih cepat daripada berkas individual dari disk dan memakan lebih sedikit ruang penyimpanan.

Anggaplah ada folder scripts/MyTool dengan berkas MyTool.js yang berisi sebuah alat QCAD, diimplementasikan dalam ECMAScript. Alat tersebut menambahkan dirinya sendiri di bagian atas menu Lain-lain dan menampilkan “Hello World” ketika dipicu.

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

Untuk mengompilasi alat skrip ini ke dalam plugin C++ kita, kita perlu membuat berkas sumber daya Qt yang mengarahkan qmake ke berkas yang ingin kita kompilasi ke dalam plugin:

<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file>
</qresource>
</RCC>

Berkas qrc mencantumkan jalur di mana sumber daya akan disediakan dalam sistem sumber daya Qt (alias=“scripts/MyTool/MyTool.js”) dan jalur sebenarnya tempat berkas dapat ditemukan di disk (hanya digunakan untuk kompilasi). Contoh di atas berarti terdapat sebuah berkas di disk di scripts/MyTool/MyTool.js yang akan dikompilasi ke dalam plugin. Segera setelah plugin dimuat, berkas tersebut akan tersedia di jalur “:/scripts/MyTool/MyTool.js”. QCAD akan menemukan alat tersebut secara otomatis di jalur itu karena ia memindai folder “scripts” serta “:/scripts” untuk mencari skrip.

Kita juga perlu menambahkan berkas qrc ke berkas proyek (exampleplugin.pro) dengan menambahkan baris berikut:

RESOURCES = scripts.qrc

Setelah mengedit berkas exampleplugin.pro, jalankan qmake dan make lagi lalu muat plugin. Sekarang seharusnya ada entri menu “MyTool” di bagian atas menu Lain-lain di QCAD.

Anda dapat menemukan kode sumber lengkap untuk plugin contoh ini di:

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

  • Jika plugin Anda berhasil dikompilasi tetapi tidak dapat dimuat oleh QCAD, pastikan versi Qt yang sama digunakan seperti untuk QCAD (lihat Bantuan > Tentang QCAD). Pastikan bahwa jika QCAD dijalankan dalam mode release, plugin Anda juga dikompilasi dalam mode release.
  • Luncurkan QCAD dari terminal atau baris perintah dan periksa keluaran konsol untuk pesan kesalahan. Tampilkan pesan keluaran di plugin Anda untuk memastikan plugin sedang dimuat. Misalnya di dalam fungsi init Anda.
  • Periksa dialog tentang (Bantuan > Tentang QCAD > Plugins) untuk pesan kesalahan.