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);
相关推荐
Teacher.chenchong32 分钟前
R语言空间分析实战:地理加权回归联合主成份与判别分析破解空间异质性难题
开发语言·回归·r语言
看到我,请让我去学习1 小时前
数据结构—排序(斐波那契数列,冒泡,选择,插入,快速,归并,图,广度优先算法)
c语言·开发语言·数据结构·后端
程序员Bears2 小时前
JSP与JSTL:EL表达式与MVC分层模式的完美结合
java·开发语言·mvc
wktomo3 小时前
GO语言学习(七)
开发语言·学习·golang
自我意识的多元宇宙3 小时前
Java List 接口知识点详解
java·开发语言
linux-hzh3 小时前
第二章 Java语言基础
java·开发语言
TE-茶叶蛋4 小时前
Web Workers 使用指南
开发语言·前端·javascript
五月茶4 小时前
JUC高并发编程
java·开发语言·jvm
红衣小蛇妖4 小时前
Python基础学习-Day30
开发语言·python·学习
爬虫程序猿4 小时前
如何利用 Java 爬虫根据 ID 获取某手商品详情:实战指南
java·开发语言·爬虫