Qt功能区:Ribbon控件

控件

1. 按钮

1.1 多选按钮

软件功能:用于实现Category的名称居中。

SARibbonCheckBox继承于QCheckBox,使用方法完全相同。

cpp 复制代码
SARibbonCheckBox* checkBox = new SARibbonCheckBox(this);
    checkBox->setText(tr("Alignment Center"));
    checkBox->setObjectName("checkBoxAlignmentCenter");
    checkBox->setWindowTitle(checkBox->text());
    pannelStyle->addSmallWidget(checkBox);
    connect(checkBox, &SARibbonCheckBox::stateChanged, this, [=](int state) {
        if (state == static_cast<int>(Qt::Checked)) {
            ribbonBar()->setRibbonAlignment(SARibbonAlignment::AlignCenter);
        }
        else {
            ribbonBar()->setRibbonAlignment(SARibbonAlignment::AlignLeft);
        }
        });

1.2 按钮

Ribbon中的按钮采用QAction类来实现。

SARibbonMenu

***用于在按钮中添加菜单项。***SARibbonMenu继承于QMenu,其中方法和属性均可用。

cpp 复制代码
class SA_RIBBON_EXPORT SARibbonMenu : public QMenu
{
    Q_OBJECT
public:
    explicit SARibbonMenu(QWidget* parent = nullptr);
    explicit SARibbonMenu(const QString& title, QWidget* parent = nullptr);
    ~SARibbonMenu();
    QAction* addRibbonMenu(SARibbonMenu* menu);
    SARibbonMenu* addRibbonMenu(const QString& title);
    SARibbonMenu* addRibbonMenu(const QIcon& icon, const QString& title);
    QAction* addWidget(QWidget* w);
};

创建菜单:

cpp 复制代码
SARibbonMenu* menu = new SARibbonMenu(this);
    QAction* a = nullptr;
    {
        QIcon itemicon = QIcon(":/icon/icon/item.svg");
        for (int i = 0; i < 5; ++i) {
            a = menu->addAction(itemicon, tr("item %1").arg(i + 1));
            a->setObjectName(QStringLiteral("item %1").arg(i + 1));
        }
    }

小按钮工具Button

cpp 复制代码
	//创建第一个 QToolButton::MenuButtonPopup模式菜单弹出按钮,点击弹出按钮弹出菜单项
    QAction* actPopup = createAction(tr("test 1"), ":/File/test1","actPopup");
    QVariant temp("Test");
    actPopup->setData(temp);
    actPopup->setMenu(menu);
    actPopup->setToolTip(tr("use QToolButton::MenuButtonPopup mode"));
    pannelToolButtonStyle->addMediumAction(actPopup, QToolButton::MenuButtonPopup);
    //立即弹出模式工具按钮,点击菜单栏即可弹出菜单项
    QAction* actInstant = createAction(tr("test 2"), ":/File/test2", "actInstant");
    actInstant->setMenu(menu);
    actInstant->setToolTip(tr("use QToolButton::InstantPopup mode"));
    pannelToolButtonStyle->addMediumAction(actInstant, QToolButton::InstantPopup);

大按钮(工具Button)

cpp 复制代码
//大按钮:延时弹出模式
    QAction* actDelayedPopup = createAction(tr(u8"延时弹出"), ":/File/foldDPopup","actDelayedPopup");
    actDelayedPopup->setMenu(menu);
    pannelToolButtonStyle->addLargeAction(actDelayedPopup, QToolButton::DelayedPopup);

    大按钮:菜单弹出模式
    QAction* actMenuPopup = createAction(tr(u8"菜单弹出"), ":/File/BMPopup", "actMenuPopup");
    actMenuPopup->setMenu(menu);
    pannelToolButtonStyle->addLargeAction(actMenuPopup, QToolButton::MenuButtonPopup);

    //大按钮:立即弹出模式
    QAction* actBInstant = createAction(tr(u8"立即弹出"), ":/File/FoldInstant", "actBInstant");
    actBInstant->setMenu(menu);
    pannelToolButtonStyle->addLargeAction(actBInstant, QToolButton::InstantPopup);

    //大按钮:菜单弹出模式,可按下
    QAction* actMenuPopupC = createAction(tr(u8"按下弹出"), ":/File/FoldInstant", "actMenuPopupC");
    actMenuPopupC->setMenu(menu);
    actMenuPopupC->setCheckable(true);
    pannelToolButtonStyle->addLargeAction(actMenuPopupC, QToolButton::MenuButtonPopup);
    
//大按钮:普通
    QAction* actPushButton = createAction(tr(u8"普通按钮"), ":/File/pushButton", "actPushButton");
    actPushButton->setCheckable(true);
    pannelToolButtonStyle->addLargeAction(actPushButton);
    connect(actPushButton, &QAction::toggled, this, [this](bool on) {
        if (on) { QMessageBox::information(this, tr(u8"按钮状态"), tr(u8"按钮被按下")); };
        });

2. 下拉列表框SARibbonComboBox

2.1 简介

实现功能:设置程序窗口的样式

窗口的样式为枚举类型:

cpp 复制代码
enum class SARibbonTheme
{
	RibbonThemeOffice2013,      ///< office2013主题
	RibbonThemeOffice2016Blue,  ///< office2016-蓝色主题
	RibbonThemeOffice2021Blue,  ///< office2021-蓝色主题
	RibbonThemeWindows7,        ///< win7主题
	RibbonThemeDark,            ///< 暗色主题
	RibbonThemeDark2
};

SARibbonComboBox直接继承于QComboBox,并没有添加什么函数

cpp 复制代码
 * @brief QComboBox的Ribbon显示,可以显示QIcon和windowTitle在左侧
 */
class SA_RIBBON_EXPORT SARibbonComboBox : public QComboBox
{
    Q_OBJECT
public:
    explicit SARibbonComboBox(QWidget *parent = nullptr);
    ~SARibbonComboBox();
};

2.2 代码实现

cpp 复制代码
//设置下拉列表框
    mComboboxRibbonTheme = new SARibbonComboBox();
    mComboboxRibbonTheme->setWindowTitle(tr("RibbonTheme"));
    mComboboxRibbonTheme->setObjectName("RibbonTheme");
    mComboboxRibbonTheme->addItem("Theme Win7", static_cast<int>(SARibbonTheme::RibbonThemeWindows7));
    mComboboxRibbonTheme->addItem("Theme Office2013", static_cast<int>(SARibbonTheme::RibbonThemeOffice2013));
    mComboboxRibbonTheme->addItem("Theme Office2016 Blue", static_cast<int>(SARibbonTheme::RibbonThemeOffice2016Blue));
    mComboboxRibbonTheme->addItem("Theme Office2021 Blue", static_cast<int>(SARibbonTheme::RibbonThemeOffice2021Blue));
    mComboboxRibbonTheme->addItem("Theme Dark", static_cast<int>(SARibbonTheme::RibbonThemeDark));
    mComboboxRibbonTheme->addItem("Theme Dark2", static_cast<int>(SARibbonTheme::RibbonThemeDark2));
    mComboboxRibbonTheme->setCurrentIndex(mComboboxRibbonTheme->findData(static_cast<int>(ribbonTheme())));
    pannelStyle->addSmallWidget(mComboboxRibbonTheme);
    connect(mComboboxRibbonTheme,
        QOverload< int >::of(&SARibbonComboBox::currentIndexChanged),  //信号重载,Overload 是一个模板类,用于显式指定要连接的信号或槽的参数类型,从而消除歧义
        this,
        [=](int index) {
            SARibbonTheme t = static_cast<SARibbonTheme>(index);
            setRibbonTheme(t);
        });

3.编辑框

SARibbonLineEdit继承于QLineEdit,使用方法相同。

cpp 复制代码
class SA_RIBBON_EXPORT SARibbonLineEdit : public QLineEdit
{
    Q_OBJECT
public:
	explicit SARibbonLineEdit(QWidget *parent = nullptr);
	explicit SARibbonLineEdit(const QString &text, QWidget *parent = nullptr);
    ~SARibbonLineEdit();
};
cpp 复制代码
SARibbonLineEdit* lineEdit = new SARibbonLineEdit(this);
    lineEdit->setObjectName("Line Edit");
    lineEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    lineEdit->setWindowTitle("Line Edit");
    lineEdit->setText("SARibbonLineEdit");
    pannelEditStyle->addSmallWidget(lineEdit);
相关推荐
weixin_472339464 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
枯萎穿心攻击4 小时前
响应式编程入门教程第二节:构建 ObservableProperty<T> — 封装 ReactiveProperty 的高级用法
开发语言·unity·c#·游戏引擎
Eiceblue6 小时前
【免费.NET方案】CSV到PDF与DataTable的快速转换
开发语言·pdf·c#·.net
m0_555762906 小时前
Matlab 频谱分析 (Spectral Analysis)
开发语言·matlab
浪裡遊7 小时前
React Hooks全面解析:从基础到高级的实用指南
开发语言·前端·javascript·react.js·node.js·ecmascript·php
lzb_kkk8 小时前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
好开心啊没烦恼8 小时前
Python 数据分析:numpy,说人话,说说数组维度。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy
简佐义的博客9 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
程序员爱钓鱼9 小时前
【无标题】Go语言中的反射机制 — 元编程技巧与注意事项
开发语言·qt