QCAD Eklentisi Oluşturma
QCAD eklentileri, QCAD’i C veya C++ ile uygulanan işlevsellikle genişletmek için kullanılabilir.
RPluginInterface’i Uygulama
Section titled “RPluginInterface’i Uygulama”Tüm QCAD eklentileri, QObject’ten ve soyut temel sınıf RPluginInterface’ten doğrudan veya dolaylı olarak türetilmelidir.
Dosya RExamplePlugin.h
Section titled “Dosya RExamplePlugin.h”İlk, minimalist örnek eklentimiz için, RPluginInterface’in çoğu yöntemi için boş veya minimalist uygulamaları doğrudan başlık dosyasına ekliyoruz. Başlık dosyasının bu ilk yapısı, QCAD’e yüklenebilecek ilk çalışan bir eklenti elde etmek için kopyalanabilir.
#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; }};Dosya RExamplePlugin.cpp
Section titled “Dosya RExamplePlugin.cpp”getPluginInfo yöntemi için, QCAD’in hakkında iletişim kutusunda bir şey görebilmek adına cpp dosyasına basit bir uygulama ekliyoruz.
#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#endifDosya exampleplugin.pro
Section titled “Dosya exampleplugin.pro”Eklentimizi derlemek için, Qt qmake ile bir Makefile’a dönüştürülebilen bir Qt proje dosyasına da ihtiyacımız var.
CONFIG += pluginTARGET = exampleinclude(../../../shared.pri)
TEMPLATE = libHEADERS = RExamplePlugin.hSOURCES = RExamplePlugin.cppDESTDIR = ../../../pluginsLIBS += -lqcadcore -lqcadgui -lqcadecmaapi- satırdaki include, QCAD kaynak kodu kurulumunun shared.pri dosyasını işaret etmelidir (ör. qcad/shared.pri). DESTDIR olarak, eklentinin QCAD tarafından da yüklenebileceği doğru yerde derlenmesi için çalışan bir QCAD kurulumunun plugins klasörünü seçmek isteyebilirsiniz.
Derleme
Section titled “Derleme”Eklentiniz bu üç dosyayla derlenerek qcad/plugins/qcadexample.dll veya libqcadexample.so ya da libqcadexample.dylib dosyası oluşturulabilir.
Not: hata ayıklama (debug) modunda derlenmiş bir QCAD ikili dosyasını çalıştırıyorsanız, eklenti de hata ayıklama modunda derlenmelidir. QCAD’i release modunda çalıştırıyorsanız, eklenti de release modunda derlenmelidir.
Eklentiyi hata ayıklama modunda derlemek için çalıştırın:
Linux / macOS:
qmakemake debugWindows:
qmakenmake debugRelease modunda derlemek için bunun yerine make release veya nmake release çalıştırın.
Açıkçası, eklenti henüz yararlı bir şey yapmayacak, ancak eklentinizi QCAD hakkında iletişim kutusunda görebilmelisiniz:
Eklentinizi göremiyorsanız, lütfen QCAD’i başlatırken terminalde hata olup olmadığını kontrol edin. Hakkında iletişim kutusunda da bir hata mesajı görebilirsiniz.
Betikleri Bir Eklentiye Kaynak Olarak Derleme
Section titled “Betikleri Bir Eklentiye Kaynak Olarak Derleme”QCAD eklentileri, bir betik koleksiyonunu ve diğer kaynakları (ui dosyaları, simgeler vb.) bir eklentiye derlemek için kullanılabilir. Bunun avantajı, birden fazla ECMAScript dosyasının kodunun tek bir derlenmiş ikili dosya içinde paketlenebilmesidir. Eklentiler, diskteki tek tek dosyalardan daha hızlı yüklenme eğilimindedir ve daha az disk alanı kaplar.
Dosya scripts/MyTool/MyTool.js
Section titled “Dosya scripts/MyTool/MyTool.js”ECMAScript’te uygulanmış bir QCAD aracı içeren MyTool.js dosyasına sahip bir scripts/MyTool klasörü olduğunu varsayalım. Araç, kendisini Çeşitli menüsünün üstüne ekler ve tetiklendiğinde “Hello World” çıktısı verir.
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"]);};Dosya scripts.qrc
Section titled “Dosya scripts.qrc”Bu betik aracını C++ eklentimize derlemek için, qmake’i eklentiye derlemek istediğimiz dosyaya yönlendiren bir Qt kaynak dosyası oluşturmamız gerekir:
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="scripts/MyTool/MyTool.js">scripts/MyTool/MyTool.js</file> </qresource></RCC>qrc dosyası, kaynakların Qt’nin kaynak sisteminde kullanılabilir hale getirileceği yolları (alias=“scripts/MyTool/MyTool.js”) ve dosyanın diskte bulunabileceği gerçek yolu (yalnızca derleme için kullanılır) listeler. Yukarıdaki örnek, diskte scripts/MyTool/MyTool.js altında eklentiye derlenecek bir dosya olduğu anlamına gelir. Eklenti yüklenir yüklenmez, dosya “:/scripts/MyTool/MyTool.js” yolu altında kullanılabilir olacaktır. QCAD, betikler için “scripts” klasörünü ve “:/scripts” yolunu taradığından, aracı bu yol altında otomatik olarak bulacaktır.
Ayrıca aşağıdaki satırı ekleyerek qrc dosyasını proje dosyasına (exampleplugin.pro) eklememiz gerekir:
RESOURCES = scripts.qrcexampleplugin.pro dosyasını düzenledikten sonra, qmake ve make’i tekrar çalıştırın ve eklentiyi yükleyin. Artık QCAD’deki Çeşitli menüsünün üstünde bir “MyTool” menü girişi olmalıdır.
Kaynak Kodu
Section titled “Kaynak Kodu”Bu örnek eklentinin tam kaynak kodunu şurada bulabilirsiniz:
https://github.com/qcad/qcad/tree/master/support/examples/exampleplugin
Sorun Giderme
Section titled “Sorun Giderme”- Eklentiniz derleniyor ancak QCAD tarafından yüklenemiyorsa, lütfen QCAD ile aynı Qt sürümünün kullanıldığından emin olun (bkz. Yardım > QCAD Hakkında). Lütfen QCAD release modunda çalıştırılıyorsa, eklentinizin de release modunda derlendiğinden emin olun.
- QCAD’i bir terminalden veya komut satırından başlatın ve konsol çıktısını hata mesajları için kontrol edin. Yüklendiğini doğrulamak için eklentinizde mesajlar çıktılayın. Örneğin init fonksiyonunuzda.
- Hata mesajları için hakkında iletişim kutusunu (Yardım > QCAD Hakkında > Eklentiler) kontrol edin.