要想在qt designer中使用自定義控制項,必須要使qt designer能夠知道我們的自定義控制項的存在。有兩種方法可以把新自定義控制項的資訊通知給qt designer:「公升級(promotion)」法和外掛程式法。
公升級法最為簡便快捷。顧名思義,公升級法就是把qt自有的控制項進行公升級改造一番。選乙個qt自有的控制項,如果它和我們新加的自定義控制項有著相似的 api,那麼只要在qt designer的對話方塊裡面完成有關新控制項的資訊就一切大吉,新控制項就可以用在qt designer建立的form中。但是在編輯和預覽時,還是和qt自有控制項表示沒有什麼兩樣。
現在把hexspinbox控制項用公升級方法插入到乙個form中:
1.用qt designer建立乙個新的窗體,把控制項箱裡的qspinbox新增到窗體中。
2.右擊spin box,選擇「promote to custom widget」上下文選單。
3.在彈出的對話方塊中,類名處填寫「hexspinbox」,標頭檔案填寫「hexspinbox.h」
好了。在uic生成的**中包含有「hexspinbox.h」標頭檔案而不是,還包含了乙個hexspinbox的例項,而不是qspinbox。在qt designer中,hexspinbox控制項由qspinbox表示,並且可以設定所有的qspinbox的屬性(如範圍、當前值)。
公升級法的缺點是不能在qt designer中設定自定義控制項自己的特有屬性,也不能夠繪製自己。這些問題可以用外掛程式法解決。
外掛程式法需要建立乙個外掛程式庫,使qt designer能夠實時載入,用來建立控制項的例項。這樣,qt designer就可以在編輯窗體或者預覽的時候使用自定義控制項。因為有了qt的meta-object系統,qt designer能動態獲得自定義控制項的全部屬性。現在以iconeditor為例,用外掛程式法把iconeditor整合到qt designer中。
首先,我們從qdesignercustomwidgetinte***ce派生乙個新類,重寫一些虛函式。我們假定這個外掛程式的源**在iconeditorplugin目錄中,iconeditor類的**在與它平行的目錄iconeditor中。
這裡是外掛程式類的定義:
#include
class iconeditorplugin : public qobject, public qdesignercustomwidgetinte***ce;
iconeditorplugin類是乙個封裝了iconeditor控制項的工廠類,它使用了雙繼承,父類為qobject和 qdesignercustomwidgetinte***ce。巨集q_inte***ces()告訴moc第二個基類為乙個外掛程式介面類。qt designer使用該類中的函式建立iconeditor的例項並得到有關它的資訊。
原始檔如下:
iconeditorplugin::iconeditorplugin(qobject *parent)
: qobject(parent)
qstring iconeditorplugin::name() const
qstring iconeditorplugin::includefile() const
qstring iconeditorplugin::group() const
qicon iconeditorplugin::icon() const
qstring iconeditorplugin::tooltip() const
qstring iconeditorplugin::whatsthis() const
bool iconeditorplugin::iscontainer() const
qwidget *iconeditorplugin::createwidget(qwidget *parent)
q_export_plugin2(iconeditorplugin, iconeditorplugin)
建構函式是乙個空函式。
函式name()返回外掛程式提供的控制項的名稱。
函式includefile()得到外掛程式封裝的特定控制項的標頭檔案,這個標頭檔案包含在uic工具產生的**中。
函式group()返回的是該自定義控制項所屬的工具箱(box group)的名字。如果qt designer中沒有這個名字,就會為這個控制項建立乙個新的組別。
函式icon()返回自定義控制項在qt designer中使用的圖示。這裡我們假設iconeditorplugin有關聯的資源檔案,裡面有乙個圖示編輯器影象的介面。
函式tooltip() 完成在qt designer的控制項箱中,當滑鼠移動到自定義控制項時,顯示字串做為提示。
函式whatsthis()返回qt designer顯示的「what』s this」提問。
函式iscontainer()返回true說明這個控制項可以包含其他控制項。例如,qframe可以包含其他控制項,則它是乙個容器控制項。很多 qt控制項都可以包含其他控制項,但是如果iscontainer()返回false,qt designer就不允許這個控制項包含其他控制項了。
qt designer呼叫函式createwidget()建立指定父控制項的控制項例項。
巨集q_export_plugin2()必須在原始檔的最後宣告,這個巨集使qt designer能夠得到這個外掛程式。第乙個引數是這個外掛程式的名字,第二個引數是實現這個外掛程式類的名字。
.pro檔案如下:
template = lib
config += designer plugin release
headers = ../iconeditor/iconeditor.h /
iconeditorplugin.h
sources = ../iconeditor/iconeditor.cpp /
iconeditorplugin.cpp
resources = iconeditorplugin.qrc
destdir = $(qtdir)/plugins/designer
.pro檔案假定環境變數qtdir位於qt的安裝目錄。在執行make或者nmake編譯外掛程式後,程式自動它安裝到qt designer的plugins目錄中。安裝成功後,我們就能象其他控制項一樣在qt designer中使用iconeditor控制項了。
如果想在qt designer整合多個自定義控制項,你可以為每個控制項建立乙個的外掛程式,也可以把所有控制項組合到乙個外掛程式中,從qdesignercustomwidgetcollectioninte***ce派生。
原來這個是從《c++ gui programming with qt 4》翻譯過來的。看了下書上這部分,提到2個方法,於是嘗試外掛程式法,一番嘗試之後,安裝新外掛程式到qt designer了,效果不錯。
安裝外掛程式後若要刪除外掛程式,只需到/plugins檔案下刪除對應的.dll和.lib檔案即可。
如何自定義babel外掛程式
babel主要處理步驟分為三個 解析 轉換 生成 解析步驟接受 輸出ast,該步驟分為兩個階段 詞法分析 語法分析。詞法分析主要是對源 進行分詞,產生乙個叫做token的陣列,分割的單位是運算子 括號 數字 字串 標點符號等可以處理的最小單元。然後語法分析再將所有的tokens組合成乙個整體,分析它...
自定義外掛程式
自定義外掛程式 建立自定義外掛程式1.建立工程 qt4 designer plugin 後續配置都使用預設值,這裡我們建立乙個 qhist 外掛程式。2.新建後,直接編譯,會產生如下錯誤 1 link fatal error lnk1181 cannot open input file qtdesi...
自定義外掛程式
工具類方法 擴充套件的語法 extend 呼叫 方法名 物件級別的方法 擴充套件語法 fn.extend 呼叫 選擇器 方法名 工具類 工具類方法 extend extend rtrim function str randomcode function num else if num 4 retur...