QCAD外掛程式開發

2021-10-12 01:35:25 字數 3690 閱讀 3432

qcad程式安裝目錄下的scripts資料夾下新建對應的資料夾和檔案,資料夾、檔名以及類名三者保持一致。這種方式可以避免編譯,暴露**方便編輯修改。

scripts/mytool/mytool.js

mytool.js:實現乙個mytool選單,在主程式命令列視窗中輸出hello world。要實現選單功能,可以直接繼承eaction這個類。

include

("scripts/eaction.js");

/** 建構函式

*/function

mytool

(guiaction)

/** 繼承eaction

*/mytool.prototype =

neweaction()

;/** 觸發選單執行的操作

*/mytool.prototype.

beginevent

=function()

;/** 選單初始化操作

*/mytool.

init

=function

(basepath)

;

js**作為動態鏈結庫的資源,編譯到動態鏈結庫中。這種方式避免了暴露js**,修改js**後,需要重新編譯外掛程式動態鏈結庫。

工程配置.pro

config      += plugin

target = example

include(../../../shared.pri)

template = lib

headers = rexampleplugin.h

sources = rexampleplugin.cpp

destdir = $$pwd/../../../plugins

libs += -lqcadcore -lqcadgui -lqcadecmaapi

resources = scripts.qrc

原始碼檔案

繼承外掛程式rplugininte***ce介面即可,一般預設即可。

rexampleplugin.h

#include

#include

#include

"rplugininte***ce.h"

class

rexampleplugin

:public qobject,

public rplugininte***ce

virtual

void

uninit

(bool

)virtual

void

postinit

(initstatus)

//初始化`js`擴充套件

virtual

void

initscriptextensions

(qscriptengine&

)//外掛程式資訊

virtual rplugininfo getplugininfo()

;//外掛程式授權檢查

virtual

bool

checklicense()

//外掛程式國際化支援初始化

virtual

void

inittranslations()

};

rexampleplugin.cpp
#include

"rexampleplugin.h"

rplugininfo rexampleplugin::

getplugininfo()

#if qt_version < 0x050000

qt_begin_namespace

q_export_plugin2

(example, rexampleplugin)

qt_end_namespace

#endif

scripts.qrc

在工程目錄下,新建對應的資料夾、檔名以及其他資源。

scripts/mytool/mytool.js

scripts/mytool/mytool.js

相同的方式,建立外掛程式工程。實現選單功能需要繼承ractionadapter

#include

#include

#include

#include

#include

"ractionadapter.h"

#include

"rdocumentinte***ce.h"

#include

"rguiaction.h"

#include

"rmainwindow.h"

class

mytool

:public ractionadapter

static

void

factory

(rguiaction* guiaction)

rdocumentinte***ce* di = rmainwindow::

getdocumentinte***cestatic()

;if(di==

null

) di-

>

setcurrentaction

(new

mytool

(guiaction));

}virtual

void

beginevent()

};

修改postinit初始化選單。

void rexampleplugin::

postinit

(initstatus status)

getmainwindow()

; rguiaction* guiaction =

newrguiaction

("&mytool"

; guiaction-

>

setrequiresdocument

(true);

guiaction-

>

setgroupsortorder

(100000);

guiaction-

>

setsortorder

(100);

>

menubar()

; qmenu* menu = menubar-

>findchild>

("miscmenu");

guiaction-

>

addtomenu

(menu)

; guiaction-

>

setfactory

(mytool::factory)

;}

QCAD 中文編碼問題

dxf檔案為文字檔案,中文編碼可能是utf 8編碼,也有可能是gbk編碼。qcad使用qt開發環境,字串統一按照utf 8編碼解碼,所以解析dxf檔案時對字串首先按照utf 8轉碼,如果轉碼失敗則按照gbk轉碼。qstring decode const std string str else ret...

使用QCAD進行二次開發之主要框架

qcad是一款開源的2d圖形繪製軟體,它的開源版本所擁有的功能已經能夠滿足基本的圖形繪製,並且可以匯出.dxf或.svg格式的圖形檔案,這對於繪製基本的工程圖元來說,功能上基本滿足。但是,使用者需要根據自己所在領域的業務需求進行改進,如何進行改進,將是接下來要介紹的內容。組成主要模組 core mo...

npm外掛程式開發 Vue外掛程式

vue init webpack npm vue ui,dependencies browserslist 1 last 2 versions not ie 8 devdependencies const path require path const webpack require webpack...