54 lines
1.4 KiB
C++
54 lines
1.4 KiB
C++
![]() |
#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的尺寸预估
|
|||
|
*
|
|||
|
* 有别于系统默认的tabbar,SARibbonTabBar的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);
|
|||
|
}
|