Qt入門(11)——Qt外掛
Qt提供了一個簡單地外掛介面,可以輕鬆地生成作為獨立元件的定製資料庫驅動、圖象格式、文字編解碼器(text codec)、風格(style)和部件。
警告:Qt 3.0.5對外掛的一些方面做了改變,具體涉及到裝載、路徑操作和庫版本。這些變化的結果是,Qt 3.0.4及以前版本編譯的外掛都不能用於Qt 3.0.5及以後版本。
寫一個外掛通過以下方式完成:寫適當的外掛基類的子類,實現幾個函式,再新增一個巨集。
一共有五個外掛基類。派生的外掛預設儲存於標準外掛目錄。
基類 預設路徑
假設你有一個新的風格類,叫做'MyStyle',你要把它做成外掛的形式。需要的程式碼直截了當:
Q_EXPORT_PLUGIN( MyStylePlugin )
構造器和解構器不需要做什麼,空的就可以。有兩個虛擬函式一定要實現。第一個是keys(),它返回在外掛中實現的類的一個字串列表。(我們在上面的例子中剛剛實現了一個類。)第二個是一個函式,它返回所要的類的一個物件(或者0,如果外掛被要求生成一個不存在的類的物件)。對於QStylePlugin來說,這第二個函式叫做create()。
可以在一個外掛裡實現任意數目的外掛子類,只要他們都是由同一個基類,比如說,QStylePlugin,派生出來的。
對於資料庫驅動、圖象格式、定製部件和文字編解碼器,不需要顯式的物件生成過程。Qt會按需求查詢並生成他們。風格則是例外,因為你可能想以程式碼顯式地設定一個風格。應用一個風格,可以使用類似程式碼:
有的外掛類還需要實現其他函式。關於一個QWidgetPlugin的完全例子,可參見Qt設計器手冊中'生成定製部件'一章的'生成定製部件'節。這個例子實現了額外的函式,以把該外掛整合到Qt設計器中去。QWidgetFactory類提供了關於QWidgetPlugin的附加資訊。
關於每種型別的外掛必須要實現哪些虛擬函式,詳見該類的文件。
Qt的應用自動辨識哪些外掛可用,因為外掛都是儲存在標準外掛子目錄下的。為此,應用不需要任何查詢和裝載外掛的程式碼,既然Qt已自動處理了。
外掛的預設目錄是$QTDIR/plugins,每種型別的外掛在那種型別的子目錄下,比如說,風格(styles)。如果你想要你的應用使用外掛但不要標準外掛路徑,可以讓你的安裝程式決定你要為外掛使用的路徑,然後儲存該路徑,比如說使用QSettings,以使應用在執行時可以讀取。之後應用可以用該路徑呼叫QApplication::addLibraryPath(),就可以使用你的外掛了。注意,路徑的最後部分,也就是說,styles、widgets等等,不能改變。
應用包括一個外掛的正規方法是,要麼把外掛與應用一起編譯,要麼把外掛編譯為DLL(或者so或者其他平臺指定的庫型別),像其他庫那樣使用。如果要讓外掛可裝載,一個方法是,生成一個應用下的子目錄,例如,appdir/plugins/designer,把外掛放置到該目錄下。
警告:Qt 3.0.5對外掛的一些方面做了改變,具體涉及到裝載、路徑操作和庫版本。這些變化的結果是,Qt 3.0.4及以前版本編譯的外掛都不能用於Qt 3.0.5及以後版本。
寫一個外掛通過以下方式完成:寫適當的外掛基類的子類,實現幾個函式,再新增一個巨集。
一共有五個外掛基類。派生的外掛預設儲存於標準外掛目錄。
基類 預設路徑
QImageFormatPlugin $QTDIR/plugins/imageformats
QSqlDriverPlugin $QTDIR/plugins/sqldrivers
QStylePlugin $QTDIR/plugins/styles
QTextCodecPlugin $QTDIR/plugins/codecs
QWidgetPlugin $QTDIR/plugins/designer
假設你有一個新的風格類,叫做'MyStyle',你要把它做成外掛的形式。需要的程式碼直截了當:
class MyStylePlugin : public QStylePlugin
{
public:
MyStylePlugin() {}
~MyStylePlugin() {}
QStringList keys() const {
return QStringList() << "MyStyle";
}
QStyle* create( const QString& key ) {
if ( key == "MyStyle" )
return new MyStyle;
return 0;
}
};
Q_EXPORT_PLUGIN( MyStylePlugin )
構造器和解構器不需要做什麼,空的就可以。有兩個虛擬函式一定要實現。第一個是keys(),它返回在外掛中實現的類的一個字串列表。(我們在上面的例子中剛剛實現了一個類。)第二個是一個函式,它返回所要的類的一個物件(或者0,如果外掛被要求生成一個不存在的類的物件)。對於QStylePlugin來說,這第二個函式叫做create()。
可以在一個外掛裡實現任意數目的外掛子類,只要他們都是由同一個基類,比如說,QStylePlugin,派生出來的。
對於資料庫驅動、圖象格式、定製部件和文字編解碼器,不需要顯式的物件生成過程。Qt會按需求查詢並生成他們。風格則是例外,因為你可能想以程式碼顯式地設定一個風格。應用一個風格,可以使用類似程式碼:
QApplication::setStyle( QStyleFactory::create( "MyStyle" ) );
有的外掛類還需要實現其他函式。關於一個QWidgetPlugin的完全例子,可參見Qt設計器手冊中'生成定製部件'一章的'生成定製部件'節。這個例子實現了額外的函式,以把該外掛整合到Qt設計器中去。QWidgetFactory類提供了關於QWidgetPlugin的附加資訊。
關於每種型別的外掛必須要實現哪些虛擬函式,詳見該類的文件。
Qt的應用自動辨識哪些外掛可用,因為外掛都是儲存在標準外掛子目錄下的。為此,應用不需要任何查詢和裝載外掛的程式碼,既然Qt已自動處理了。
外掛的預設目錄是$QTDIR/plugins,每種型別的外掛在那種型別的子目錄下,比如說,風格(styles)。如果你想要你的應用使用外掛但不要標準外掛路徑,可以讓你的安裝程式決定你要為外掛使用的路徑,然後儲存該路徑,比如說使用QSettings,以使應用在執行時可以讀取。之後應用可以用該路徑呼叫QApplication::addLibraryPath(),就可以使用你的外掛了。注意,路徑的最後部分,也就是說,styles、widgets等等,不能改變。
應用包括一個外掛的正規方法是,要麼把外掛與應用一起編譯,要麼把外掛編譯為DLL(或者so或者其他平臺指定的庫型別),像其他庫那樣使用。如果要讓外掛可裝載,一個方法是,生成一個應用下的子目錄,例如,appdir/plugins/designer,把外掛放置到該目錄下。
相關文章
- QT入門QT
- cmake構建Qt外掛QT
- QT快速入門QT
- Qt Quick 如何入門?QTUI
- Qt入門之概述QT
- Qt學習--Qt Plugin建立及呼叫2(外掛管理器)QTPlugin
- Qt Creator匯入不同Qt版本QT
- Qt自定義外掛plugin的開發和呼叫QTPlugin
- Chrome外掛入門Chrome
- QT從入門到入土(四)——多執行緒QT執行緒
- 《Qt 6.x從入門到精通》簡介QT
- qt 載入winPcap庫QTPCA
- Chrome外掛開發入門Chrome
- Qt Creator 原始碼學習筆記04,多外掛實現原理分析QT原始碼筆記
- 單例模式入門講解C++和Qt5單例模式C++QT
- QT從入門到入土(八)——專案打包和釋出QT
- QT從入門到入土(四)——多執行緒(QtConcurrent::run())QT執行緒
- QT從入門到入土(三)——訊號和槽機制QT
- QT從入門到入土(三)——檔案的讀寫操作QT
- 【點雲PCL入門】PCL+QT+VTK顯示點雲QT
- Babel 外掛開發入門指南Babel
- Babel外掛開發入門指南Babel
- gitbook 入門教程之實用外掛(新增3個外掛)Git
- QTQT
- qt 寫入xml檔案例項QTXML
- webpack-bundle-analyzer外掛快速入門Web
- webpack4入門筆記——外掛Web筆記
- Gradle外掛從入門到進階Gradle
- 前端圖表外掛ECharts入門教程前端Echarts
- Qt - Qt Creator下載與安裝QT
- QT 自定義外掛問題 error: LNK2001: 無法解析的外部符號QTError符號
- Qt FontQT
- Qt MetaTypeInterfaceQT
- Qt MetadataQT
- 11_QT跨平臺執行之把QT程式交叉編譯到ARM開發板QT編譯
- 【QT】 Qt多執行緒的“那些事”QT執行緒
- QT Creator/QT Designer佈局自適應QT
- gitbook 入門教程之主題外掛(初稿)Git
- mini-css-extract-plugin外掛快速入門CSSPlugin