QtCreator插件框架学习04-扩展核心插件设置接口

之前的核心插件比较简单,仅仅用于显示一个主窗口,这里扩展其功能,使它可以与其他插件进行联系起来。下面就先实现一个设置扩展功能:

  • 一个设置界面接口,其他插件可以通过这个接口添加自己的设置界面;
1、设置界面接口

该接口管理所有的设置界面,由IOptionPage接口类和IOptionPageWidget接口类组成,即使用QtCreator源码中coreplugin插件下Dialogs文件夹下的实现源码。

1.1、IOptionPage/IOptionPageWidget接口

直接使用QtCreator的CorePlugin文件夹下的Dialogs/IOptionPage源码,其他设置界面则继承该接口,并在对应的插件初始化时候实例化对象。

2、系统设置界面
2.1、创建系统设置界面SystemSettings

该设置界面为主程序通用设置界面,如语言选择、字体设置、主题颜色设置等,实现方法如下:

  • 头文件 systemsettings.h:
#ifndef SYSTEMSETTINGS_H
#define SYSTEMSETTINGS_H

#include <QObject>
#include <coreplugin/dialogs/ioptionspage.h>

class SystemSettings : public Core::IOptionsPage
{
public:
    SystemSettings();
};

#endif // SYSTEMSETTINGS_H

  • 实现文件systemsettings.cpp:
#include "systemsettings.h"

#include "ui_SystemSettings.h"

#include <QDebug>

using namespace Core;

class SystemSettingsWidget : public Core::IOptionsPageWidget
{
public:
    SystemSettingsWidget() {
        m_ui.setupUi(this);
        m_ui.comboBox->addItems(QStringList()<<"set1"<<"set2"<<"set3");
    }

    void apply() override;

private:
    Ui::SystemSettings m_ui;
};

void SystemSettingsWidget::apply()
{
    qDebug()<<" system settings apply";
}

SystemSettings::SystemSettings()
{
    setId("SystemSetting");
    setCategory("System");
    setDisplayName("SystemSetting");
    setWidgetCreator([] {return new SystemSettingsWidget;});
}

  • 界面文件

界面这里直接添加一个名字为SystemSettings.ui文件方便直接用QtDesigner设计,Object名字改为SystemSettings,编译后可以生成 ui_SystemSettings.h 头文件; 然后我们就可以直接使用该界面作为设置界面了,即上面的 Ui::SystemSettings,使用:m_ui.setupUi(this);

2.2、实例化设置界面对象

直接在对应的插件初始化时候创建,这里SystemSettings设置在CorePlugin初始化时候创建:

bool CorePlugin::initialize(const QStringList &, QString *)
{

    ...

    //system settings
    new SystemSettings();

    return true;
}
3、加载设置界面

SystemSettings设置界面创建后,需要在设置窗口加载使用。

3.1、创建主设置窗口
  • 先创建设置窗口,该窗口为程序的所有设置界面的容器;
  • 窗体由两部分:界面左边放置一个List控件,右边为StackWidget控件; list控件用于显示设置的名字,StackWidget则放置由插件添加的设置窗体。
  • 加载所有的设置界面:
SettingsDialog::SettingsDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::SettingsDialog)
{
    ui->setupUi(this);

    //model dialog
    this->setModal(true);

    //load settings page
    QList<IOptionsPage*> optionPages = IOptionsPage::allOptionsPages();

    foreach(IOptionsPage* page, optionPages){
        qDebug()<<" add setting page:"<<page->id()<<","<<page->category();

        ui->categoryList->addItem(page->id());
        ui->stackedWidget->addWidget(page->widget());
    }

    ......

}

这里是通过IOptionPage接口中提供的allOptionsPages() 函数获取到所有设置界面,然后把每个设置的名字和窗体加到主设置窗口中。

3.2、显示设置界面

要显示设置界面,需要通过菜单、工具栏的QAction来激活,这里是通过主界面的工具栏按钮:

#include "coreplugin.h"

#include <QLabel>
#include <QDebug>
#include <QAction>
#include <QToolBar>

#include <coreplugin/dialogs/ioptionspage.h>
#include <coreplugin/dialogs/settingsdialog.h>

#include "systemsettings.h"

using namespace Core;

bool CorePlugin::initialize(const QStringList &, QString *)
{

    qDebug()<<__FILE__<<" at line "<<__LINE__<<" :"<<" coreplugin initialize";

    QMainWindow *mwin = new QMainWindow;

    QLabel *label = new QLabel(mwin);
    label->setText("corePlugin");
    mwin->setCentralWidget(label);
    mwin->setMinimumSize(800,400);
    mwin->setWindowTitle("MonkeyQDK 0.01 by MakerInChina");

    QAction *actSetting = new QAction("setting");
    connect(actSetting,&QAction::triggered,this,&CorePlugin::settingsDialog);

    QToolBar *mainToolbar = new QToolBar("ToolBar",mwin);

    mainToolbar->addAction(actSetting);

    mwin->addToolBar(Qt::TopToolBarArea,mainToolbar);

    m_mainWindow.reset(mwin);

    //system settings
    new SystemSettings();

    return true;
}

void CorePlugin::extensionsInitialized()
{

}

QObject *CorePlugin::remoteCommand(const QStringList &, const QString &, const QStringList &)
{
    m_mainWindow->show();

    return nullptr;
}

void CorePlugin::settingsDialog()
{
    SettingsDialog *settingDialog = new SettingsDialog;

    settingDialog->exec();

}

  • 先在CorePlugin的初始化函数中添加一个工具栏并加入一个按钮用于激活设置窗口;
  • 设置按钮点击后创建设置窗体并执行进行显示;
3.3、效果如下

点击工具栏的设置按钮 setting 后,会出现如下设置窗体界面:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值