Qt 擴充套件 擴充套件部件和外掛程式

2021-06-28 20:58:27 字數 3535 閱讀 9776

qt 擴充套件-擴充套件部件和外掛程式

[email protected]

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引數,就...