instAdmin/Cpp/GisDes/SaRibbon/SARibbonBar/SARibbonTabBar.cpp

54 lines
1.4 KiB
C++
Raw Normal View History

2024-10-29 22:24:50 +08:00
#include "SARibbonTabBar.h"
#include <QStyleOptionTab>
#include <QFontMetrics>
SARibbonTabBar::SARibbonTabBar(QWidget* parent) : QTabBar(parent), m_tabMargin(6, 0, 0, 0)
{
setExpanding(false);
}
const QMargins& SARibbonTabBar::tabMargin() const
{
return (m_tabMargin);
}
void SARibbonTabBar::setTabMargin(const QMargins& tabMargin)
{
m_tabMargin = tabMargin;
}
/**
* @brief tab的尺寸预估
*
* tabbarSARibbonTabBar的tab高度和tabbar高度一致
* @param index
* @return
*/
QSize SARibbonTabBar::tabSizeHint(int index) const
{
if (index < 0) {
return QSize();
}
QStyleOptionTab opt;
initStyleOption(&opt, index);
int hframe = style()->pixelMetric(QStyle::PM_TabBarTabHSpace, &opt, this);
const QFontMetrics fm = fontMetrics();
int widgetWidth = 0;
int padding = 0;
if (!opt.leftButtonSize.isEmpty()) {
padding += 4;
widgetWidth += opt.leftButtonSize.width();
}
if (!opt.rightButtonSize.isEmpty()) {
padding += 4;
widgetWidth += opt.rightButtonSize.width();
}
if (!opt.icon.isNull()) {
padding += 4;
}
const int textWidth = fm.size(Qt::TextShowMnemonic, opt.text).width();
QSize csz = QSize(textWidth + opt.iconSize.width() + hframe + widgetWidth + padding, height());
return style()->sizeFromContents(QStyle::CT_TabBarTab, &opt, csz, this);
}