成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深度解析 Qt 中動態(tài)鏈接庫

移動開發(fā)
Qt還有一種方式,就是把一個QWidget子類,編譯成動態(tài)鏈接庫.然后根據(jù)動態(tài)鏈接庫創(chuàng)建一個對象,返回QWidget子針,如果你的類不是QWidget的子類,就不能用這種方法了。

本文介紹的是Qt動態(tài)鏈接庫,現(xiàn)在有些軟件有自動升級功能,有些就是下載新的DLL文件,替換原來的動態(tài)鏈接庫,MFC好象也有類似機(jī)制,Qt還有一種方式,就是把一個QWidget子類,編譯成動態(tài)鏈接庫.然后根據(jù)動態(tài)鏈接庫創(chuàng)建一個對象,返回QWidget子針,如果你的類不是QWidget的子類,就不能用這種方法了

QLibrary也是用來加載動態(tài)鏈接庫,但它創(chuàng)建出來返回的是某個"方法的指針"(不需要頭文件),而QPluginLoader創(chuàng)建返回的是"對象的指針"(對象中有哪些方法可調(diào)用,就要頭文件說了,所以上面的例子中,需要提供一個接口頭文件)

昨天一個同事說要把一個類做成DLL的形式,但這個類不是從QWidget繼承。 研究了一下,發(fā)現(xiàn)Qt提供了一個類QPluginLoader可以加載動態(tài)鏈接庫。能把一個普通的類編譯生成DLL,通過QPluginLoader使用它。

寫一個例子說明吧:

工程A中,使用了這樣一個類,專門用來讓算所得稅;

  1. Tax.h  
  2. class  Tax  
  3. {  
  4.   float incomeTax(int income);  
  5. };  
  6. Tax.cpp  
  7. Tax::incomeTax(int income)  
  8. {  
  9. float res=(income-1600)*0.5;  
  10. return res;  
  11. }  
  12. main.cpp  
  13. Int main()  
  14. {  
  15. Tax taxobject;  
  16. taxObject. incomeTax(2200);  
  17. ............  

編譯后部署到機(jī)器上.

如果計稅方式變了,則incomeTax()必須改寫了;

  1. Tax::incomeTax(int income)  
  2. {  
  3. float res=(income-2000)*0.3;  
  4. return res;  

頭文件沒有變,只是修改了計稅方式,工程A必須重新編譯,然后重新部署; 如果工程A很大或部署的機(jī)器很多,代價就大了.

如果讓Tax類,單獨編譯成動態(tài)鏈接庫,再把Tax中的要被使用的接口寫在另一個頭文件中,供工程A使用;每次計稅方式變了,只需修改Tax類,然后重新編譯生成動態(tài)鏈接庫,然后替換工程A中的相應(yīng)的動態(tài)鏈接庫.而工程A不用重新編譯即可使用新的計稅方式.

新建一工程B,專門用來把Tax類做成動態(tài)鏈接庫的形式:

  1. //首先定義接口(只要一個頭文件即可)  
  2. Tax.h  
  3. class Tax  
  4. {  
  5.     virtual float incomeTax(int income);  
  6. };  
  7. QT_BEGIN_NAMESPACE  
  8. Q_DECLARE_INTERFACE(Tax,"TaxDLL/1.0");  //這個宏用聲明接口  
  9. QT_END_NAMESPACE 

然后從寫一個具體業(yè)務(wù)類,繼承上面的接口和QObject,實現(xiàn)接口中定義的方法

  1. TaxPlugin.h  
  2. class  TaxPlugin:public QObject,Tax  
  3. {  
  4.     Q_OBJECT  
  5.     Q_INTERFACES(Tax)            
  6. public:  
  7.   float incomeTax(int income);  
  8. };  
  9. TaxPlugin.cpp  
  10. TaxPlugin::incomeTax(int income)  
  11. {  
  12. float res=(income-1600)*0.5;  
  13. return res;  
  14. }  
  15. Q_EXPORT_PLUGIN2(Tax, TaxPlugin);    //這個宏用來導(dǎo)出動態(tài)鏈接庫 

編譯工程B,生成Tax.dll.

把工程Tax.dll和頭文件Tax.h,拷到工程A中,供工程A使用.

工程A中

  1. int main()  
  2. {  
  3. Tax *taxObject;  
  4. QPluginLoader pluginLoader("Tax.dll");  
  5. QObject *plugin = pluginLoader.instance();  
  6. taxObjectqobject_cast<Tax *>(plugin);  
  7. taxObject->incomeTax(2100);  

如果稅率變了,只要修改工程B中的類,然后重新編譯生成Tax.dll,替換工程A中原來的庫.而工程A不必重新編譯即可使用新的計稅方式.

現(xiàn)在有些軟件有自動升級功能,有些就是下載新的DLL文件,替換原來的動態(tài)鏈接庫。

MFC好象也有類似機(jī)制

Qt還有一種方式,就是把一個QWidget子類,編譯成動態(tài)鏈接庫.然后根據(jù)動態(tài)鏈接庫創(chuàng)建一個對象,返回QWidget子針,如果你的類不是QWidget的子類,就不能用這種方法了

QLibrary也是用來加載動態(tài)鏈接庫,但它創(chuàng)建出來返回的是某個"方法的指針"(不需要頭文件),而QPluginLoader創(chuàng)建返回的是"對象的指針"(對象中有哪些方法可調(diào)用,就要頭文件說了,所以上面的例子中,需要提供一個接口頭文件)動態(tài)

小結(jié):Qt動態(tài)鏈接庫 的內(nèi)容介紹完了,希望本文對你有所幫助。

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2009-08-28 16:19:30

C#實現(xiàn)修改動態(tài)鏈接庫

2012-05-04 08:24:14

LinuxUnix

2012-05-08 14:48:23

LinuxUnix動態(tài)鏈接庫

2022-06-09 09:54:45

編譯軟件開發(fā)

2024-06-06 08:53:13

動態(tài)鏈接庫共享庫

2011-05-18 17:15:45

2011-06-09 11:11:35

QT 靜態(tài)庫 動態(tài)庫

2022-05-03 23:44:21

Python動態(tài)鏈接庫Ctypes

2009-07-07 20:57:20

LinuxUnix動態(tài)鏈接庫

2024-03-01 20:59:11

C#DLL開發(fā)

2009-08-05 16:29:18

C#調(diào)用C++動態(tài)鏈接

2023-05-09 08:24:11

JNA鏈接庫代碼

2009-10-29 16:36:49

VB.NET .DLL

2022-10-24 00:03:21

動態(tài)鏈接庫DLL

2023-11-29 08:31:20

PythonRust

2011-06-21 14:01:07

QT 界面庫 Embedded

2022-08-09 07:57:25

Linux操作系統(tǒng)Windows

2011-06-21 15:48:41

2011-06-21 15:58:20

Qt 數(shù)據(jù)庫

2011-06-27 09:15:21

QT Creator
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 婷婷久久精品一区二区 | 福利片一区二区 | 久久高清免费视频 | 97日韩精品| 国产午夜精品理论片a大结局 | 91精品国产99久久 | 黄片毛片在线观看 | 精久久久 | 久草网在线视频 | 成人一区二区三区在线观看 | 国产成人在线免费 | 成人国产精品免费观看 | 人妖无码 | 欧美精品一区二区三区在线 | 亚洲成人一区 | 精品国产久| 91久久爽久久爽爽久久片 | 成人精品一区亚洲午夜久久久 | 日韩成人在线观看 | 欧美另类视频在线 | 毛片网站在线观看 | 午夜一区| 欧美日韩亚洲一区 | 91中文字幕在线 | h视频在线观看免费 | 日韩av电影在线观看 | 91精品国产乱码久久久久久 | 国产日韩精品一区二区三区 | 一区二区三区视频在线观看 | 精品视频一区二区三区在线观看 | 成人影视网址 | 在线观看日韩av | 久久久久久亚洲精品不卡 | 夜夜骑天天干 | 日韩欧美在线一区 | 97精品超碰一区二区三区 | 欧美激情一区二区 | 国产在线观看一区二区 | 奇米久久 | 欧美婷婷 | 最新高清无码专区 |