目錄通常,外掛程式不需要直接訪問外掛程式管理器。 互動主要間接的通過extensionsystem::iplugin介面。 在某些情況下,則必須使用外掛程式管理器api。 外掛程式需要訪問外掛程式管理器的物件池,以擴充套件qt creator的某些方面,例如將頁面新增到選項對話方塊。 他們還可以利用物件池為其他外掛程式提供擴充套件點。
外掛程式管理器處理所有細節,包括查詢外掛程式,讀取它們的描述檔案,解決外掛程式依賴性,以正確的順序載入和初始化所有外掛程式,以及傳遞命令列引數給外掛程式。
另外,外掛程式管理器管理物件池,可以根據不同的條件在其中註冊和檢索物件。
外掛程式與外掛程式管理器的大多數互動應通過extensionsystem::iplugin介面完成,但是下表總結了一些對外掛程式有用的函式和訊號。 有關完整列表,請參見extensionsystem::pluginmanager參考文件。
函式描述
instance()
返回外掛程式管理器單例,例如,用於連線訊號。
addobject()
在物件池中註冊物件。 也可以通過extensionsystem::iplugin::addobject()。
removeobject()
從物件池中移除物件。 也可以通過extensionsystem::iplugin::removeobject()。
allobjects()
返回物件池中註冊的所有物件的未過濾列表。
getobject()
返回註冊在物件池中的型別為t的物件。 這在向aggregation致敬。
getobjectbyname(const qstring &name)
返回在物件池中註冊的具有給定物件名稱的物件。
訊號描述
objectadded(qobject *object)
在物件被註冊到物件池之後傳送。
abouttoremoveobject(qobject *object)
在物件從物件池中移除之前傳送。
initializationdone()
在外掛程式執行,且所有延遲的初始化完成時傳送。
外掛程式可以將物件註冊到由外掛程式管理器管理的公共池中。池中的物件必須派生自qobject,無需其他先決條件。
所有指定型別的物件,可以通過getobject()函式從物件池中檢索。函式感知aggregation::aggregate,並使用aggregation::query()函式,而不是qobject_cast來判斷匹配物件。
可以通過allobjects()函式,檢索在物件池中註冊的所有物件的未過濾列表。
也可以使用getobjectbyname(),檢索具有特定物件名稱的物件(參見qobject::objectname())。
每當物件池的狀態更改時,外掛程式管理器都會發出相應的objectadded()
或abouttoremoveobject()
訊號。
物件池的乙個常見用例是,乙個外掛程式(或應用程式)為其他外掛程式提供了擴充套件點,擴充套件點為類,在其他外掛程式中實現,並新增到物件池中,然後供提供擴充套件點的外掛程式檢索。也可以使用物件池來提供對物件的訪問,而無需實際鏈結到提供的外掛程式庫。
原創造福大家,共享改變世界
獻出一片愛心,溫暖作者心靈
qt creator原始碼全方面分析 2 0
目錄 支援其他檔案型別 執行外部工具 所有主題 qt creator是為qt開發人員的需求量身定製的跨平台整合開發環境 ide qt creator可以通過多種方式擴充套件。例如,qt creator架構基於外掛程式載入器,這意味著外掛程式載入器以外的所有功能都在外掛程式中實現。但是,您可以擴充套件...
qt creator原始碼全方面分析 2 6
目錄 編寫訊息 ui文字大寫 使用句子樣式大寫 準備本地化 qt creator通用條款 請遵循本節中的準則,以確保擴充套件與qt creator ui保持一致,並且可以輕鬆地將其本地化為其他語言。編寫ui文字時,請確保它 使用者介面文字應簡潔明瞭且經濟實惠。避免使用不必要的內容詞和短語。但是,更重...
qt creator原始碼全方面分析 4 2
目錄外掛程式的本質就是動態鏈結庫,對於庫,需要匯出符號,供使用者匯入使用。在qt creator的原始碼中,存在固定的匯入匯出模式。對於每個庫和外掛程式,都有乙個xx global.h標頭檔案,其中xx為庫或外掛程式名。示例如下 pragma once include if defined xx l...