在之前搭建的框架基础上添加一个自定义插件,该插件可以和之前的核心插件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、最终效果
-
页面如下:
-
设置界面如下: