1. 按钮
1.1 多选按钮
软件功能:用于实现Category的名称居中。
SARibbonCheckBox继承于QCheckBox,使用方法完全相同。
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类来实现。
2. 下拉列表框SARibbonComboBox
2.1 简介
实现功能:设置程序窗口的样式
窗口的样式为枚举类型:
enum class SARibbonTheme
{
RibbonThemeOffice2013, ///< office2013主题
RibbonThemeOffice2016Blue, ///< office2016-蓝色主题
RibbonThemeOffice2021Blue, ///< office2021-蓝色主题
RibbonThemeWindows7, ///< win7主题
RibbonThemeDark, ///< 暗色主题
RibbonThemeDark2
};
SARibbonComboBox直接继承于QComboBox,并没有添加什么函数
* @brief QComboBox的Ribbon显示,可以显示QIcon和windowTitle在左侧
*/
class SA_RIBBON_EXPORT SARibbonComboBox : public QComboBox
{
Q_OBJECT
public:
explicit SARibbonComboBox(QWidget *parent = nullptr);
~SARibbonComboBox();
};
2.2 代码实现
//设置下拉列表框
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);
});