qt 擴充套件-擴充套件部件和外掛程式
2023年1月30日
外掛程式是指由應用程式指定介面,由其它程式實現此介面,並可由應用程式動態載入的實現庫。
方法:擴充套件現有部件,擴充套件qt自身外掛程式,擴充套件應用程式的外掛程式,自定義新的控制項。
參考:目標:擴充套件qt已有的部件。
方法:派生現有部件類的子類,擴充套件功能。
在qtdesigner中提公升為指定的子類。
示例:擴充套件qpushbutton。
connect(ui->pushbutton_5,signal(clicked()),ui->pushbutton_5,slot(getname()));
#ifndef qmybutton_h
#define qmybutton_h
#include
class qmybutton : publicqpushbutton
q_object
public:
explicit qmybutton(qwidget *parent = 0);
signals:
public slots:
void getname();
#endif // qmybutton_h
#include"qmybutton.h"
qmybutton::qmybutton(qwidget*parent) :
qpushbutton(parent)
void qmybutton::getname()
settext ("exbtn");
目標:擴充套件qt本身已有的外掛程式。
方法:派生於指定的外掛程式類,並將**置於指定目錄,使用巨集註冊後方可使用。
參見:qt-help:how to create qtplugins。
目標:定義指定功能介面,動態載入不同的具有實現庫。
原理:封裝介面和qlibrary功能,實現動態載入實現庫。
實現了指定介面類,能夠動態載入和使用的實現庫稱為外掛程式。
方法:目標:定義具體介面抽象類。
方法:通常在應用中定義,由實現引用。
3.3.1.1 定義介面抽象類:定義一系統功能介面。
class qsettesttext
public:
virtual ~qsettesttext(){}
virtual void settext(const qstring &) =0;
virtual qstring gettext() = 0;
3.3.1.2 註冊介面類:向元物件系統中註冊自定義的介面類。
格式:q_declare_inte***ce(類名,id)
q_declare_inte***ce(qsettesttext,"gutang.geprocess.plugin")
1) 指定工程的目標型別
target = testplugin1
template = lib
config += plugin
2) 實現類派生於qobject和介面類。
3) 實現類指定實現的介面類:q_inte***ce(介面類名)
4) 實現抽象介面。
5) 匯出qt外掛程式介面:指定qpluginloader使用的標準匯出函式(主要是例項化的類名)及指定檔案。
格式:q_export_plugin2(匯出檔名,實現類名)
#ifndef qtestplugin1_h
#define qtestplugin1_h
#include"testplugin1_global.h"
#include"../beginner/plugin/qsettesttext.h"
#include
classtestplugin1shared_export qtestplugin1:public qobject,qsettesttext
q_object
q_inte***ces(qsettesttext)
public:
qtestplugin1();
// qsettesttext inte***ce
public:
virtual void settext(const qstring&str)
virtual qstring gettext()
private:
qstring m_strtext;
#endif // qtestplugin1_h
#include"qtestplugin1.h"
#include
qtestplugin1::qtestplugin1()
: m_strtext("this is plugin1.")
q_export_plugin2(testplugin1,qtestplugin1)
1) 載入實現庫:load()
2) 生成介面例項:測試是否成功,確認成功後再使用。
qobject_cast<>測試例項。
3) 解除安裝實現庫:unload(),此時僅將引用減少1,只有引用數為0時才解除安裝。
#include
#include"plugin/qsettesttext.h"
voidmainwindow::on_pushbutton_6_clicked()
qpluginloaderloader("plugins/qtestplugin2.dll");
loader.load ();
qsettesttext *ptest =qobject_cast(loader.instance ());
if(ptest!=null){
ui->pushbutton_6->settext(ptest->gettext ());
loader.unload ();
2) 外掛程式使用引用管理,load()增加引用數,unload()減少引用數。
3) 部分外掛程式資訊會被快取,注意時間戳。
4) 外掛程式的型別與qt保持一致,qt是動態庫時,外掛程式也是動態庫;qt是靜態庫時,外掛程式也必須是靜態庫。
目標:建立qtdesigner中可以使用的自定義控制項。
原理:qtdesigner中的控制項可以外掛程式的形式定義,copy到外掛程式目錄,就可在qtdesigner中使用。
方法:在工程型別中選擇其它專案-》qt4設計師自定義控制項。
設定控制項類名和其它屬性,可憐設定乙個顯示圖示。
在專案中找到控制項名的工程列表,並修改其中的**。
#include "showxinxin.h"
#include
showxinxin::showxinxin(qwidget*parent) :
qwidget(parent)
qpushbutton *pbtn1=new qpushbutton(this);
pbtn1->settext ("xinxin");
使用release發布程式,將生成的dll copy到當前qt構建套件的安裝目錄,plugins/designer/目錄下。
開啟對應版本的qtdesigner,可以看到自定義控制項。
UIView的類擴充套件,擴充套件CGRect
菜雞成長日記 感慨 剛接觸ios程式設計的時候我們常常會先敲 同時學習基礎知識,如果是培訓出來的童鞋,由於沒有基礎或者基礎比較薄弱,往往會發現很多知識都沒怎麼理解,這時候自學 從網上找資料 和討論往往能更有效率的獲得知識 菜雞成長日記 內容 看到前輩們總是在乙個專案中對uiview進行類方法的擴充套...
資料庫表擴充套件 擴充套件屬性
在表的設計時候,由於考慮步驟,需要新增一些字段,重新設計表,但是又不想對錶結構進行大量的改動,其中乙個方法是進行表的擴充套件 假設基礎表為table base 才有三層生成的base bll base dal base model,現在需要進行擴充套件 擴充套件表為table ext,擴充套件表對應...
PHP擴充套件 擴充套件的載入順序及調整
首先找到php擴充套件載入目錄 php i grep extension dir 得到 usr lib64 php modules 那麼這個目錄在 設定的呢?php.ini裡面也沒有啊?我們在編譯安裝擴充套件的時候需要指定 with php config usr bin php config引數,就...