日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qt插件元数据不包含一个有效的元数据_qt creator源码全方面分析(2-10-2)

發布時間:2023/12/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt插件元数据不包含一个有效的元数据_qt creator源码全方面分析(2-10-2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Creating Your First Plugin

本節介紹,如何使用Qt Creator提供的插件模板,來創建Qt Creator插件,并獲取對插件的組成和結構的第一印象。

創建一個插件項目

Qt Creator附帶了一個創建Qt Creator插件的向導,該向導會為您創建一個可運行的最小插件。我們強烈建議您使用兩個不同的Qt Creator實例來開發和測試您的插件。否則,您的插件也可以被加載到您的開發環境中,但如果你的插件不穩定,這會使開發環境也不穩定。 您可以僅僅創建Qt Creator的一個拷貝,使用一個進行實際開發,而使用另一個來測試插件。

您需要確保,你使用的用來創建插件的Qt Creator的版本要相同。 由于Qt Creator的[二進制和源代碼兼容性規則](file:///F:/plugin/qt_creator/qt-creator-opensource-src-4.6.2/doc/api/zx-html-doc-dev/coding-style.html#binary-and-source-compatibility)(https://www.cnblogs.com/codeForFamily/p/qt-creator-ide-source-learn-2-1-1.html),Qt Creator插件向導創建了一個插件,該插件只能在創建時使用的Qt Creator版本中運行。

選擇文件>新建文件或項目>庫>Qt Creator插件>選擇

項目介紹和位置對話框被打開。

為您的項目命名,并指定該項目的路徑。 實際插件的名稱可以與項目名稱不同。 稍后您將在向導中選擇該名稱。 繼續下一頁。

套件選擇對話框被打開。

選擇用于構建和運行項目的套件。 對于Qt Creator插件,套件必須是桌面設備類型,而Qt版本必須是構建插件時所用的Qt Creator的Qt版本(最好是完全相同的)。 如果您使用不兼容的Qt版本來構建插件,則Qt Creator嘗試加載插件時,會出現錯誤。 繼續下一頁。

插件信息對話框被打開。

在插件名稱字段中,鍵入Example。插件的名稱將作為標識符,并且也是代碼中文件名和類的基礎。

以下字段的值是主要信息,并顯示在Qt Creator的插件概述的詳細視圖中(幫助>關于插件,或者在Mac上為Qt Creator>關于插件)。

Vendor name是創建插件的公司或組織的簡稱。這也用于插件部署的路徑名。

Copyright就一行,簡短的版權字符串。

License是許可證文本。

Description是插件功能的簡短描述。

URL是一個網站,用戶可以在其中找到有關插件和/或提供插件的組織的更多信息。

設置Qt Creator源文件和Qt Creator構建字段,分別輸入您要用來測試插件的Qt Creator實例的源文件和構建目錄。如果您未正確執行此操作,則將導致插件編譯錯誤,并且您的插件可能根本不會出現在Qt Creator中。

在部署到列表中,選擇Qt Creator構建。這將.pro文件設置為,直接部署插件到Qt Creator構建目錄的插件子目錄中(要求具有寫權限)。另一個選項,本地用戶設置,將.pro文件設置為,部署插件到Qt Creator的用戶插件路徑中(例如Unix系統上的~/.config/QtProject/qtcreator/plugins)。我們選擇Qt Creator構建,是因為我們使用自編譯Qt Creator,并且希望插件僅被該Qt Creator實例加載。繼續下一頁。

項目管理對話框被打開。

查看將要創建的文件,選擇Qt Creator項目使用的版本控制系統(這是一個好主意!),然后完成向導。

構建并運行插件

如果您在項目向導中傳遞了正確的Qt Creator源文件和構建路徑,則在按下構建按鈕時,您的插件應該可以很好地被構建。 當您嘗試運行你的項目時,Qt Creator將詢問您要運行的可執行文件,并顯示以下對話框:

在構建中選擇Qt Creator可執行文件的路徑,路徑在項目向導的Qt Creator build設置中指定,然后單擊“確定”。 Qt Creator啟動,您可以驗證插件是否已成功加載:查找菜單項Tools > Example,然后在關于插件對話框中查找插件。

文件結構

插件向導會創建一組插件需要或應該具備的基礎文件。 我們將在以下各節中詳細介紹其中的一些內容,這是一個簡短的概述:

文件

角色

Example.json.in

插件元數據模板。QMake根據此文件創建Example.json,該文件作為元數據編譯到插件中。 Qt Creator讀取元數據以了解有關插件的信息。

example.pro

項目文件,QMake使用該文件生成Makefile,然后用于插件構建。

example_global.h

包含宏定義,此插件將符號導出給其他插件時,非常有用。

exampleconstants.h

頭文件,定義了插件代碼使用的常量。

exampleplugin.h/.cpp

C++頭文件和源文件,定義將由Qt Creator插件管理器實例化并運行的插件類。

qmake項目

qmake項目文件example.pro定義了如何編譯插件。 除了告訴qmake需要編譯哪些文件之外(或由moc或uic處理),Qt Creator插件還需要進行特定設置。 讓我們詳細了解一下項目向導為您生成的內容。

DEFINES += EXAMPLE_LIBRARY

.pro文件的第一部分允許編譯器傳遞Example_LIBRARY定義給已編譯的代碼,該定義已在example_global.h頭文件中使用,但目前尚無真正意義。 您無需更改.pro文件的該部分。

SOURCES += exampleplugin.cpp

HEADERS += exampleplugin.h \

example_global.h \

exampleconstants.h

此部分告訴qmake需要進行編譯或其他處理的項目文件。您可以使用你要添加到項目中的任何文件,來擴展該部分。

## set the QTC_SOURCE environment variable to override the setting here

QTCREATOR_SOURCES = $$(QTC_SOURCE)

isEmpty(QTCREATOR_SOURCES):QTCREATOR_SOURCES=/Users/example/qtcreator-src

## set the QTC_BUILD environment variable to override the setting here

IDE_BUILD_TREE = $$(QTC_BUILD)

isEmpty(IDE_BUILD_TREE):IDE_BUILD_TREE=/Users/example/qtcreator-build

要編譯和部署您的插件,該項目需要訪問Qt Creator源代碼,然后進行構建。 此部分包含尋找有關源代碼位置信息的邏輯,并在QTC_SOURCE和QTC_BUILD環境變量中進行構建。 如果它們未定義,它將使用您在項目向導中設置的默認值。

因此,如果其他人在他們的計算機上打開您的插件項目,他們不需要編輯.pro文件,而是應該為插件的構建環境設置正確的QTC_SOURCE和QTC_BUILD環境變量。

您可能不需要更改此部分,除非可以更改默認值

## uncomment to build plugin into user config directory

## /plugins/

## where is e.g.

## "%LOCALAPPDATA%\QtProject\qtcreator" on Windows Vista and later

## "$XDG_DATA_HOME/data/QtProject/qtcreator" or "~/.local/share/data/QtProject/qtcreator" on Linux

## "~/Library/Application Support/QtProject/Qt Creator" on Mac

# USE_USER_DESTDIR = yes

Qt Creator插件既可以安裝到Qt Creator安裝路徑中的插件子目錄(需要寫訪問權限),也可以安裝到用戶特定的插件目錄。 .pro文件中的USE_USER_DESTDIR開關定義了用于構建插件的方法(該方法與后面用于將插件分發給其他用戶的方法無關)。

###### If the plugin can be depended upon by other plugins, this code needs to be outsourced to

###### _dependencies.pri, where is the name of the directory containing the

###### plugin's sources.

QTC_PLUGIN_NAME = Example

QTC_LIB_DEPENDS += \

# nothing here at this time

QTC_PLUGIN_DEPENDS += \

coreplugin

QTC_PLUGIN_RECOMMENDS += \

# optional plugin dependencies. nothing here at this time

###### End _dependencies.pri contents ######

此部分定義插件的名稱和依賴項。 QTC_PLUGIN_NAME變量定義了插件的名稱,以及為其創建的動態庫的名稱。 QTC_LIB_DEPENDS變量是您的插件所依賴的Qt Creator實用工具庫的列表。 典型的值是aggregation,extensionsystem和utils。 QTC_PLUGIN_DEPENDS變量定義您的插件所依賴的Qt Creator插件。 幾乎所有Qt Creator插件都依賴coreplugin。QTC_PLUGIN_RECOMMENDS變量定義了您的插件可以選擇性依賴的Qt Creator插件。 有關更多信息,請參見Optional Dependencies。

include($$QTCREATOR_SOURCES/src/qtcreatorplugin.pri)

包含的qtcreatorplugin.pri文件,通過使用上面提供的信息,確保您構建適合在Qt Creator中使用的插件。

有關qmake和一般編寫.pro文件的更多信息,請參見qmake手冊。

插件元數據模板

.json文件是一個JSON文件,包含插件管理器查找您的插件的信息,以及在加載插件庫文件之前解析依賴項所需的信息。 在這里,我們將僅作簡短介紹。 有關更多信息,請參見Plugin Meta Data。

向導實際上并不直接創建.json文件,而是創建一個.json.in文件。 qmake使用它來生成實際的插件.json元數據文件,用其實際值替換QTCREATOR_VERSION之類的變量。 因此,您需要對.json.in文件中的所有反斜杠和引號進行轉義(即,您需要寫入\和\",用來在生成的插件JSON元數據中得到反斜杠和引號)。

\"Name\" : \"Example\",

\"Version\" : \"0.0.1\",

\"CompatVersion\" : \"0.0.1\",

元數據中的第一項由項目向導中定義的插件的名稱生成,第二項是插件版本,第三項是當前版本能二進制兼容的此插件的版本。

\"Vendor\" : \"My Company\",

\"Copyright\" : \"(C) My Company\",

\"License\" : \"BSD\",

\"Category\" : \"Examples\",

\"Description\" : \"Minimal plugin example.\",

\"Url\" : \"http://www.mycompany.com\",

之后,您將找到在項目向導中提供的有關插件的信息。

$$dependencyList

$$dependencyList變量會被插件.pro文件中的QTC_PLUGIN_DEPENDS和QTC_PLUGIN_RECOMMENDS中的依賴項信息自動替換。

插件類

文件exampleplugin.h和exampleplugin.cpp定義了您的小插件的實現。 我們將在這里介紹一些重點,并為各個部分提供更詳細的信息的鏈接。

頭文件

頭文件exampleplugin.h定義了插件類的接口。

namespace Example {

namespace Internal {

該插件定義在Example::Internal名稱空間,該名稱空間符合Qt Creator源代碼中 namespacing的編碼規則。

class ExamplePlugin : public ExtensionSystem::IPlugin

{

Q_OBJECT

Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Example.json")

所有Qt Creator插件都必須從ExtensionSystem::IPlugin派生,并且是QObjects派生類。 Q_PLUGIN_METADATA宏對于創建有效的Qt插件是必需的。 宏中給定的IID必須是org.qt-project.Qt.QtCreatorPlugin,用于標識插件為Qt Creator插件,并且FILE必須指向該插件的元數據文件,描述見Plugin Meta Data。

bool initialize(const QStringList &arguments, QString *errorString);

void extensionsInitialized();

ShutdownFlag aboutToShutdown();

基類定義了在插件生命周期中調用的基本函數,在此處需要新插件實現。Plugin Life Cycle詳細描述了這些函數及其作用。

private:

void triggerAction();

該插件有一個附加的自定義槽,用于彈出對話框,在用戶選擇該插件添加的菜單項時。

源文件

源文件包含插件的實際實現,注冊了一個新菜單和子菜單項,并在觸發子菜單項時,打開一個消息框。

來自插件代碼本身,Core插件和Qt的所有必需的頭文件都包含在文件的開頭。 菜單和子菜單項在插件的initialize初始化函數中完成設置的,該函數在插件構造函數完成之后的最先被調用。在該函數中,插件可以確保其依賴的插件的基本設置已完成,例如,Core插件的ActionManager實例已被創建。

QAction *action = new QAction(tr("Example Action"), this);

Core::Command *cmd = Core::ActionManager::registerAction(action, Constants::ACTION_ID,

Core::Context(Core::Constants::C_GLOBAL));

cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Alt+Meta+A")));

connect(action, &QAction::triggered, this, &ExamplePlugin::triggerAction);

這部分代碼創建一個新的QAction,將其注冊為動作管理器中的新Command,并將其連接到插件的槽。 動作管理器提供了一個中心位置,用戶可以在該位置分配和更改鍵盤快捷鍵,并進行管理,例如菜單項應在不同情況下指向不同的插件,以及其他一些情況。

Core::ActionContainer *menu = Core::ActionManager::createMenu(Constants::MENU_ID);

menu->menu()->setTitle(tr("Example"));

menu->addAction(cmd);

Core::ActionManager::actionContainer(Core::Constants::M_TOOLS)->addMenu(menu);

在這里,將創建一個新菜單,并添加已創建的命令,然后將菜單添加到菜單欄中的工具菜單中。

void ExamplePlugin::triggerAction()

{

QMessageBox::information(Core::ICore::mainWindow(),

tr("Action Triggered"),

tr("This is an action from Example."));

}

這部分定義了觸發子菜單項時調用的代碼。它使用Qt API打開一個消息框,該消息框顯示內容豐富的文本和確定按鈕。

原創造福大家,共享改變世界

獻出一片愛心,溫暖作者心靈

總結

以上是生活随笔為你收集整理的qt插件元数据不包含一个有效的元数据_qt creator源码全方面分析(2-10-2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。