feat: 添加ElaWidgetTool库
This commit is contained in:
115
ElaWidgetTools/ElaToolBar.cpp
Normal file
115
ElaWidgetTools/ElaToolBar.cpp
Normal file
@@ -0,0 +1,115 @@
|
||||
#include "ElaToolBar.h"
|
||||
|
||||
#include <QLayout>
|
||||
#include <QPainter>
|
||||
#include <QStyleOption>
|
||||
|
||||
#include "ElaIcon.h"
|
||||
#include "ElaTheme.h"
|
||||
#include "ElaToolBarPrivate.h"
|
||||
#include "ElaToolBarStyle.h"
|
||||
ElaToolBar::ElaToolBar(QWidget* parent)
|
||||
: QToolBar(parent), d_ptr(new ElaToolBarPrivate())
|
||||
{
|
||||
Q_D(ElaToolBar);
|
||||
d->q_ptr = this;
|
||||
setObjectName("ElaToolBar");
|
||||
setStyle(new ElaToolBarStyle(style()));
|
||||
layout()->setSpacing(10);
|
||||
layout()->setContentsMargins(3, 3, 3, 3);
|
||||
|
||||
d->_themeMode = eTheme->getThemeMode();
|
||||
connect(eTheme, &ElaTheme::themeModeChanged, this, [=](ElaThemeType::ThemeMode themeMode) {
|
||||
d->_themeMode = themeMode;
|
||||
if (this->isFloating())
|
||||
{
|
||||
update();
|
||||
}
|
||||
});
|
||||
setAttribute(Qt::WA_TranslucentBackground);
|
||||
|
||||
connect(this, &ElaToolBar::topLevelChanged, this, [=](bool topLevel) {
|
||||
if (topLevel)
|
||||
{
|
||||
layout()->setContentsMargins(d->_shadowBorderWidth + 3, d->_shadowBorderWidth + 3, d->_shadowBorderWidth + 3, d->_shadowBorderWidth + 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
layout()->setContentsMargins(3, 3, 3, 3);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ElaToolBar::ElaToolBar(const QString& title, QWidget* parent)
|
||||
: ElaToolBar(parent)
|
||||
{
|
||||
setWindowTitle(title);
|
||||
}
|
||||
|
||||
ElaToolBar::~ElaToolBar()
|
||||
{
|
||||
delete this->style();
|
||||
}
|
||||
|
||||
void ElaToolBar::setToolBarSpacing(int spacing)
|
||||
{
|
||||
layout()->setSpacing(spacing);
|
||||
}
|
||||
|
||||
int ElaToolBar::getToolBarSpacing() const
|
||||
{
|
||||
return layout()->spacing();
|
||||
}
|
||||
|
||||
QAction* ElaToolBar::addElaIconAction(ElaIconType::IconName icon, const QString& text)
|
||||
{
|
||||
QAction* action = new QAction(text, this);
|
||||
action->setProperty("ElaIconType", QChar((unsigned short)icon));
|
||||
action->setIcon(ElaIcon::getInstance()->getElaIcon(ElaIconType::Broom, 1));
|
||||
addAction(action);
|
||||
return action;
|
||||
}
|
||||
|
||||
QAction* ElaToolBar::addElaIconAction(ElaIconType::IconName icon, const QString& text, const QKeySequence& shortcut)
|
||||
{
|
||||
QAction* action = new QAction(text, this);
|
||||
action->setShortcut(shortcut);
|
||||
action->setProperty("ElaIconType", QChar((unsigned short)icon));
|
||||
action->setIcon(ElaIcon::getInstance()->getElaIcon(ElaIconType::Broom, 1));
|
||||
addAction(action);
|
||||
return action;
|
||||
}
|
||||
|
||||
void ElaToolBar::paintEvent(QPaintEvent* event)
|
||||
{
|
||||
Q_D(ElaToolBar);
|
||||
QPainter painter(this);
|
||||
painter.save();
|
||||
painter.setRenderHints(QPainter::Antialiasing);
|
||||
if (isFloating())
|
||||
{
|
||||
// 高性能阴影
|
||||
eTheme->drawEffectShadow(&painter, rect(), d->_shadowBorderWidth, 6);
|
||||
//背景
|
||||
painter.setPen(ElaThemeColor(d->_themeMode, PopupBorder));
|
||||
painter.setBrush(ElaThemeColor(d->_themeMode, DialogBase));
|
||||
QRect foregroundRect(d->_shadowBorderWidth, d->_shadowBorderWidth, width() - 2 * d->_shadowBorderWidth, height() - 2 * d->_shadowBorderWidth);
|
||||
painter.drawRoundedRect(foregroundRect, 5, 5);
|
||||
QStyle* style = this->style();
|
||||
QStyleOptionToolBar opt;
|
||||
initStyleOption(&opt);
|
||||
opt.rect = style->subElementRect(QStyle::SE_ToolBarHandle, &opt, this);
|
||||
if (opt.rect.isValid())
|
||||
{
|
||||
style->drawPrimitive(QStyle::PE_IndicatorToolBarHandle, &opt, &painter, this);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
painter.setPen(Qt::NoPen);
|
||||
painter.setBrush(Qt::transparent);
|
||||
painter.drawRoundedRect(rect(), 5, 5);
|
||||
QToolBar::paintEvent(event);
|
||||
}
|
||||
painter.restore();
|
||||
}
|
||||
Reference in New Issue
Block a user