控件
- [1. 按钮](#1. 按钮)
-
- [1.1 多选按钮](#1.1 多选按钮)
- [1.2 按钮](#1.2 按钮)
- [2. 下拉列表框SARibbonComboBox](#2. 下拉列表框SARibbonComboBox)
-
- [2.1 简介](#2.1 简介)
- [2.2 代码实现](#2.2 代码实现)
- 3.编辑框
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);
