Files
cbh/ElaWidgetTools/DeveloperComponents/ElaBreadcrumbBarDelegate.cpp
2025-09-19 22:40:52 +08:00

58 lines
1.8 KiB
C++

#include "ElaBreadcrumbBarDelegate.h"
#include <QPainter>
#include "ElaTheme.h"
ElaBreadcrumbBarDelegate::ElaBreadcrumbBarDelegate(QObject* parent)
: QStyledItemDelegate{parent}
{
_themeMode = eTheme->getThemeMode();
connect(eTheme, &ElaTheme::themeModeChanged, this, [=](ElaThemeType::ThemeMode themeMode) {
_themeMode = themeMode;
});
}
ElaBreadcrumbBarDelegate::~ElaBreadcrumbBarDelegate()
{
}
void ElaBreadcrumbBarDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
painter->save();
painter->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
painter->setPen(ElaThemeColor(_themeMode, BasicText));
QRect itemRect = option.rect;
QString breadcrumbDisplayData = index.data(Qt::DisplayRole).toString();
QString breadcrumbUserData = index.data(Qt::UserRole).toString();
if (breadcrumbUserData != "LastBreadcrumb")
{
if (_pPressIndex == index)
{
//鼠标按下
painter->setPen(ElaThemeColor(_themeMode, BasicTextPress));
}
else
{
//不为最后一个 且没有被鼠标覆盖
if (!(option.state & QStyle::State_MouseOver))
{
painter->setPen(ElaThemeColor(_themeMode, BasicTextNoFocus));
}
}
}
if (breadcrumbDisplayData != ">")
{
painter->drawText(itemRect, Qt::AlignVCenter | Qt::AlignLeft, breadcrumbDisplayData);
}
else
{
//分隔符
QFont iconFont = QFont("ElaAwesome");
iconFont.setPixelSize(painter->font().pixelSize() * 0.785);
painter->setFont(iconFont);
itemRect.setX(itemRect.x() - itemRect.width() * 0.36);
painter->drawText(itemRect, Qt::AlignCenter, QChar((unsigned short)ElaIconType::AngleRight));
}
painter->restore();
}