QtCreator插件框架学习06-添加自己的插件

在之前搭建的框架基础上添加一个自定义插件,该插件可以和之前的核心插件Coreplugin的设置接口和页面显示接口进行联系起来,以扩展程序的功能。

1、说明
1.1、实现功能

在之前搭建的插件框架基础上添加自己的插件,这个插件为一个简单的示例插件,仅显示一个简单的界面。

1.2、实现方法
  • 这个插件的显示界面通过核心插件的页面接口进行添加;
  • 插件的设置界面通过核心插件的设置接口进行添加;
2、具体实现
2.1、插件主界面
#ifndef HELLOPAGE_H
#define HELLOPAGE_H

#include <coreplugin/fancypage.h>

class HelloPage : public Core::FancyPage
{
public:
    HelloPage();
};

#endif // HELLOPAGE_H

界面继承自核心插件页面接口 FancyPage 类,然后构造函数中实现界面:

#include "hellopage.h"

#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QMessageBox>

HelloPage::HelloPage()
{
    QWidget *helloWidget = new QWidget;

    QHBoxLayout *mainLayout = new QHBoxLayout(helloWidget);
    helloWidget->setLayout(mainLayout);

    QLabel *label = new QLabel(helloWidget);
    label->setText("Hello Page");
    QFont font("Microsoft YaHei", 10, 75);
    label->setFont(font);
    label->setStyleSheet("color:red;");
    label->setAlignment(Qt::AlignCenter);
    mainLayout->addWidget(label);

    QPushButton *btn = new QPushButton(helloWidget);
    btn->setText("HelloMessage");
    connect(btn,&QPushButton::clicked,[=](){
        QMessageBox::information(helloWidget, "HelloPlugin", "this is a demo plugin page");
    });

    mainLayout->addWidget(btn);

    setButtonName("Hello");
    setWidget(helloWidget);
}

主要是先创建窗体控件,然后由setWidget方法将它添加到页面中,setButtonName则设置界面的选择按钮文字。

2.2、插件设置界面

插件设置界面继承自核心插件的设置接口IOptionPage类,实现如下:

#ifndef HELLOSETTINGS_H
#define HELLOSETTINGS_H

#include "hello_global.h"
#include <coreplugin/dialogs/ioptionspage.h>

class HELLOPLUGIN_EXPORT HelloSettings : public Core::IOptionsPage
{
public:
    HelloSettings();
};

#endif // HELLOSETTINGS_H

#include "hellosettings.h"

#include <QCoreApplication>
#include <QDebug>
#include <QHBoxLayout>
#include <QPushButton>
#include <QLabel>

#include "ui_HelloSettings.h"

using namespace Core;

class HelloSettingsPageWidget : public Core::IOptionsPageWidget
{
public:
    HelloSettingsPageWidget() {
        m_ui.setupUi(this);

        m_ui.comboBox->addItems(QStringList()<<"test1"<<"test2"<<"test3");

    }

    void apply() override;

private:
    Ui::HelloSettings m_ui;
};

void HelloSettingsPageWidget::apply()
{
    qDebug()<<" hello settings apply";
}

HelloSettings::HelloSettings()
{
    setId("HelloSetting");
    setDisplayName("general");
    setCategory("HelloSetting");
    setCategoryIconPath(":/image/settingscategory.png");
    setWidgetCreator([] {return new HelloSettingsPageWidget;});
}


其中的设置窗体界面可以直接用QtDesigner工具创建。

2.3、实例化窗体

上面两个部分创建后,需要在插件初始化时实例化:

#include "helloplugin.h"

#include <QMessageBox>

#include <extensionsystem/pluginmanager.h>

#include "hellosettings.h"
#include "hellopage.h"

HelloPlugin::HelloPlugin()
{

}

HelloPlugin::~HelloPlugin()
{

}

bool HelloPlugin::initialize(const QStringList &arguments, QString *errorString)
{
    Q_UNUSED(arguments);
    Q_UNUSED(errorString);

    //hello settings
    new HelloSettings();

    //hello page
    ExtensionSystem::PluginManager::addObject(new HelloPage);
}

void HelloPlugin::extensionsInitialized()
{
}

这样处理后,核心插件就可以通过插件框架机制加载这两个界面。

2.3、最终效果
  • 页面如下:
    在这里插入图片描述

  • 设置界面如下:

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值