1. 程式人生 > >QtCreator插件開發(一)——QtCreator插件實例

QtCreator插件開發(一)——QtCreator插件實例

QtCreator插件開發

QtCreator插件開發(一)——QtCreator插件實例

版權聲明:
本系列文章翻譯自:Writing Qt Creator Plugins。如果任何人或機構對於版權有異議,請聯系我。
本文將使用QtCreator-2.8.1版本進行插件開發,由於QtCreator-2.8.1的插件機制進行了部分更改,因此將根據QtCreator-2.8.1插件機制為基礎撰寫本文。

一、QtCreator源碼編譯

1、構建目錄的創建

QtCreator工程的源碼編譯推薦在獨立工作目錄進行,避免源碼被汙染。在QtCreator工程的根目錄下創建build目錄。

2、生成工程MakeFile文件

在build目錄下使用命令行運行:

qmake ../qtcreator.pro -recursive
如果報錯,錯誤信息如下:QMAKESPEC has not been set, so configuration cannot be deduced.
解決方法:
export QMAKESPEC=/usr/local/Trolltech/Qt-4.8.6/mkspecs/linux-g++

3、編譯構建

在build目錄下使用命令行運行:
make
不同的操作系統可能為mingw32-make或nmake。

4、結果查看

編譯完成後,在build/bin目錄下查看並運行qtcreator。

二、簡單插件開發

1、創建插件工程

學習QtCreator插件開發的最好方式就是實際動手編寫一個QtCreator插件。本文將編寫一個什麽也不做的QtCreator插件DoNothing,目的在於熟悉QtCreator基本的類,感受創建一個QtCreator插件的過程。

本文將不依賴於Qt Creator提供的項目向導,而是直接以.pro文件創建插件。
在$$QT_CREATOR_ROOT/src/plugins目錄下創建一個目錄DoNothing。插件的所有源碼放在DoNothing目錄中。
在qt-creator-2.8.1-src/src/plugins目錄創建DoNothing目錄,DoNothing.pro文件內容如下:
DoNothing.pro:

TEMPLATE = lib
TARGET = DoNothing
include(../../qtcreatorplugin.pri)
#DESTDIR = $$IDE_PLUGIN_PATH/Scorpio
PROVIDER = Scorpio
include(../../plugins/coreplugin/coreplugin.pri)
HEADERS += DoNothingPlugin.h
SOURCES += DoNothingPlugin.cpp
OTHER_FILES += DoNothing.pluginspec     DoNothing_dependencies.pri

工程配置文件DoNothing.pro配置了插件的如下內容:
A、TEMPLATE聲明DoNothing插件是一個庫
B、TARGET聲明目標文件名稱,目標文件將是DoNothing.dll或是libDoNothing.so;
C、配置DoNothing使用qtcreatorplugin.pri中定義的設置;
D、DESTDIR指定目標輸出目錄為$$IDE_PLUGIN_PATH/Scorpio。默認情況下是$$IDE_PLUGIN_PATH/QtProject。如果指定了輸出目錄,需要將生成的插件拷貝到$$IDE_PLUGIN_PATH/QtProject目錄,QtCreator才能加載成功。
E、PROVIDER為提供插件的公司或者組織名字;
F、配置DoNothing使用coreplugin.pri定義的設置;
G、HEADERS 提供組成插件的.h文件
H、SOURCES提供組成插件的.cpp文件
I、OTHER_FILES提供插件需要的其它文件,如依賴文件

2、標記要編譯的插件

在qt-creator-2.8.1-src/src/plugins/plugins.pro文件尾添加要編譯的插件:
SUBDIRS += DoNothing
確保再次編譯QtCreator的時候,DoNothing插件會與其它插件一起被編譯。

3、插件實現

在目錄下創建DoNothing插件的實現文件。所有的插件都需要實現IPlugin接口。$$QT_CREATOR_ROOT/src/plugins/
DoNothing/DoNothingPlugin.h文件如下:

#ifndef DONOTHINGPLUGIN_H
#define DONOTHINGPLUGIN_H

#include <extensionsystem/iplugin.h>

class DoNothingPlugin : public ExtensionSystem::IPlugin
{
public:
    DoNothingPlugin();
    ~DoNothingPlugin();

    void extensionsInitialized();
    bool initialize(const QStringList & arguments, QString * errorString);
    void shutdown();
};

#endif // DONOTHINGPLUGIN_H

DoNothingPluigin.cpp文件如下:

#include "DoNothingPlugin.h"
#include <QtPlugin>
#include <QStringList>

DoNothingPlugin::DoNothingPlugin()
{
    // Do nothing
}

DoNothingPlugin::~DoNothingPlugin()
{
    // Do notning
}

bool DoNothingPlugin::initialize(const QStringList& args, QString *errMsg)
{
    Q_UNUSED(args);
    Q_UNUSED(errMsg);

    return true;
}

void DoNothingPlugin::extensionsInitialized()
{
    // Do nothing
}

void DoNothingPlugin::shutdown()
{
    // Do nothing
}

Q_EXPORT_PLUGIN(DoNothingPlugin)

initialize()函數會在Qt Creator請求插件初始化時被調用,常用於初始化插件的內部狀態和插件註冊actions/objects到QtCreator。當插件依賴的所有資源都被加載後,initialize()函數才會被調用。初始化成功返回true,用於告訴QtCreator本插件已經初始化成功。如果初始化不成功,應該在errMsg中存儲可讀的錯誤信息,供QtCreator在界面上顯示出來。
extensionsInitialized()函數在插件初始化後被調用(例如initialize()函數調用後)。extensionsInitialized()函數會由第一個依賴於本插件的其他插件進行調用。
shutdown()函數在插件即將被卸載的時候調用。
Q_EXPORT_PLUGIN()宏用於將類導出。

4、編寫pluginspec插件描述文件

每個插件都需要提供一個插件描述文件pluginspec,用於提供關於插件的元數據,例如版本、依賴項等。DoNothing插件的pluginspec文件DoNothing.pluginspec內容如下:

<plugin name="DoNothing" version="1.0.0" compatVersion="2.8.1">
    <vendor>Scorpio.org</vendor>
    <copyright>(C) 2010-2011 Scorpio.org</copyright>
    <license>Do anything you want.</license>
    <description>A plugin that does nothing.</description>
    <url>http://www.scorpio.net</url>
    <dependencyList>
        <dependency name="Core" version="2.8.1"/>
    </dependencyList>
</plugin>

pluginspec文件是一個XML文件,提供了如下信息:
插件名稱:插件名稱用於作提供插件實現的庫的名稱
插件版本號
要求的Qt Creator的版本號
插件提供者。
版權。
協議文本。
插件描述。
插件提供者的URL。
依賴列表。列出本插件依賴的所有插件,Qt Creator將保證此處列出的所有依賴項都加載並且初始化後采取加載本插件。

5、編寫插件依賴描述文件

DoNothing.pro會利用qtcreatorplugin.pri文件檢查插件相應的依賴信息。因此需要創建一個插件依賴描述文件xxx_dependencies.pri。
DoNothing_dependencies.pri文件內容如下:

QTC_PLUGIN_NAME = DoNothing

QTC_PLUGIN_DEPENDS +=     Coreplugin

文件說明了插件的名稱和依賴

6、編譯插件

DoNothing目錄下文件如下:
技術分享圖片
從命令行進入build目錄,執行如下命令:
qmake ../qtcreator.pro -recursive
make
/build/lib/qtcreator/plugins目錄下會有一個QtProject目錄,即編譯鏈接的插件的目錄。

7、插件查看

運行build/bin目錄下的QtCreator,在幫助菜單中“已安裝插件”的對話框中可以找到DoNothing插件:
技術分享圖片

QtCreator插件開發(一)——QtCreator插件實例