【问题标题】:Compiling own QtCreator Plugin fails编译自己的 QtCreator 插件失败
【发布时间】:2013-11-07 10:17:40
【问题描述】:

我正在尝试按照this 指南创建自己的 QtCreator 插件。

所以我克隆了this repo 并检查了 v2.8.1 标记的提交 (c3ed746c)。

然后我复制了我的 QtCreator 2.8.1 目录并创建了一个新的 Qt Creator 插件项目。

然后我在我的项目目录中创建一个名为 MyPlugin.json 的新文件。

如果我尝试编译我的插件,我会收到以下错误:

e:\qtprojects\build-myplugin-desktop_qt_5_1_1_msvc2012_32bit-debug\debug../../MyPlugin/mypluginplugin.h(6):致命错误 C1083:无法打开包含文件:“extensionsystem/iplugin.h”:否这样的文件或目录 jom: E:\QtProjects\build-MyPlugin-Desktop_Qt_5_1_1_MSVC2012_32bit-Debug\Makefile.Debug [debug\moc_mypluginplugin.obj] 错误 2 jom: E:\QtProjects\build-MyPlugin-Desktop_Qt_5_1_1_MSVC2012_32bit-Debug\Makefile [调试] 错误 2 10:56:51:进程“E:\Qt\Qt5\Tools\QtCreator\bin\jom.exe”以代码 2 退出。 构建/部署项目 myplugin 时出错(套件:Desktop Qt 5.1.1 MSVC2012 32bit) 执行步骤“制作”时 10:56:51:经过时间:00:01。

我必须做些什么才能让它发挥作用?

这是源文件:

myplugin.pro

DEFINES += MYPLUGIN_LIBRARY

 # MyPlugin files

SOURCES += mypluginplugin.cpp

HEADERS += mypluginplugin.h \
        myplugin_global.h \
        mypluginconstants.h

 # Qt Creator linking

 ## set the QTC_SOURCE environment variable to override the setting here
QTCREATOR_SOURCES = $$(QTC_SOURCE)
isEmpty(QTCREATOR_SOURCES):QTCREATOR_SOURCES=E:/QtProjects/_QtCreatorPlugIns/qt-creator

 ## set the QTC_BUILD environment variable to override the setting here
IDE_BUILD_TREE = $$(QTC_BUILD)
isEmpty(IDE_BUILD_TREE):IDE_BUILD_TREE=E:/QtProjects/_QtCreatorPlugIns/QtCreator

 ## uncomment to build plugin into user config directory
 ## <localappdata>/plugins/<ideversion>
 ##    where <localappdata> 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

PROVIDER = MyCompany

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

myplugin_global.h

#ifndef MYPLUGIN_GLOBAL_H
#define MYPLUGIN_GLOBAL_H

#include <QtGlobal>

#if defined(MYPLUGIN_LIBRARY)
#  define MYPLUGINSHARED_EXPORT Q_DECL_EXPORT
#else
#  define MYPLUGINSHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // MYPLUGIN_GLOBAL_H

mypluginconstants.h

#ifndef MYPLUGINCONSTANTS_H
#define MYPLUGINCONSTANTS_H

namespace MyPlugin {
    namespace Constants {

        const char ACTION_ID[] = "MyPlugin.Action";
        const char MENU_ID[] = "MyPlugin.Menu";

    } // namespace MyPlugin
} // namespace Constants

#endif // MYPLUGINCONSTANTS_H

mypluginplugin.h

#ifndef MYPLUGIN_H
#define MYPLUGIN_H

#include "myplugin_global.h"

#include <extensionsystem/iplugin.h>

namespace MyPlugin {
    namespace Internal {

        class MyPluginPlugin : public ExtensionSystem::IPlugin
        {
                Q_OBJECT
                Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "MyPlugin.json")

            public:
                MyPluginPlugin();
                ~MyPluginPlugin();

                bool initialize(const QStringList &arguments, QString *errorString);
                void extensionsInitialized();
                ShutdownFlag aboutToShutdown();

            private slots:
                void triggerAction();
        };

    } // namespace Internal
} // namespace MyPlugin

#endif // MYPLUGIN_H

mypluginplugin.cpp

#include "mypluginplugin.h"
#include "mypluginconstants.h"

#include <coreplugin/icore.h>
#include <coreplugin/icontext.h>
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h>
#include <coreplugin/actionmanager/actioncontainer.h>
#include <coreplugin/coreconstants.h>

#include <QAction>
#include <QMessageBox>
#include <QMainWindow>
#include <QMenu>

#include <QtPlugin>

using namespace MyPlugin::Internal;

MyPluginPlugin::MyPluginPlugin()
{
    // Create your members
}

MyPluginPlugin::~MyPluginPlugin()
{
    // Unregister objects from the plugin manager's object pool
    // Delete members
}

bool MyPluginPlugin::initialize(const QStringList &arguments, QString *errorString)
{
    // Register objects in the plugin manager's object pool
    // Load settings
    // Add actions to menus
    // Connect to other plugins' signals
    // In the initialize method, a plugin can be sure that the plugins it
    // depends on have initialized their members.

    Q_UNUSED(arguments)
    Q_UNUSED(errorString)

    QAction *action = new QAction(tr("MyPlugin 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, SIGNAL(triggered()), this, SLOT(triggerAction()));

    Core::ActionContainer *menu = Core::ActionManager::createMenu(Constants::MENU_ID);
    menu->menu()->setTitle(tr("MyPlugin"));
    menu->addAction(cmd);
    Core::ActionManager::actionContainer(Core::Constants::M_TOOLS)->addMenu(menu);

    return true;
}

void MyPluginPlugin::extensionsInitialized()
{
    // Retrieve objects from the plugin manager's object pool
    // In the extensionsInitialized method, a plugin can be sure that all
    // plugins that depend on it are completely initialized.
}

ExtensionSystem::IPlugin::ShutdownFlag MyPluginPlugin::aboutToShutdown()
{
    // Save settings
    // Disconnect from signals that are not needed during shutdown
    // Hide UI (if you add UI that is not in the main window directly)
    return SynchronousShutdown;
}

void MyPluginPlugin::triggerAction()
{
    QMessageBox::information(Core::ICore::mainWindow(),
                             tr("Action triggered"),
                             tr("This is an action from MyPlugin."));
}

Q_EXPORT_PLUGIN2(MyPlugin, MyPluginPlugin)

目录

E:\QtProjects\_QtCreatorPlugIns> tree

├───qt-creator
│   ├───bin
│   ├───dist
│   ├───doc
│   ├───lib
│   ├───qbs
│   ├───scripts
│   ├───share
│   ├───srcn64interrupt
│   └───testsster
├───QtCreator
│   ├───bin
│   ├───lib0
│   └───share

【问题讨论】:

    标签: qt plugins qt-creator


    【解决方案1】:

    如果你是linux用户,可以下载qtcreator-dev。但是,我不知道它在 Windows 上是如何工作的。

    1. 打开终端
    2. 类型:sudo apt-get install qtcreator-dev
    3. 完成。

    【讨论】:

    • +1 又好又容易...但是如何在其他发行版上做呢? (Debian 没有包 qtcreator-dev。我需要添加一些 apt-repositories 吗?)
    • 如果您的发行版仍然使用apt。然后就好了。您可以通过阅读以下指南 webupd8.org/2014/10/… 手动添加 Ubuntu SDK 团队 (ppa:ubuntu-sdk-team/ppa) 的 PPA。如果不是,我怀疑,我无法提供答案。干杯。
    • dev 版本恕我直言只是 Qt Creator 在调试模式下构建。因此,如果(像我一样)有人从源代码编译 Qt Creator,他/她还应该在 IDE 的发布版本旁边进行调试。
    猜你喜欢
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2016-10-28
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多