feat: 添加ElaWidgetTool库
This commit is contained in:
112
ElaWidgetTools/ElaMessageButton.cpp
Normal file
112
ElaWidgetTools/ElaMessageButton.cpp
Normal file
@@ -0,0 +1,112 @@
|
||||
#include "ElaMessageButton.h"
|
||||
|
||||
#include <QMouseEvent>
|
||||
#include <QPainter>
|
||||
#include <QPainterPath>
|
||||
|
||||
#include "ElaMessageBar.h"
|
||||
#include "ElaTheme.h"
|
||||
#include "private/ElaMessageButtonPrivate.h"
|
||||
Q_PROPERTY_CREATE_Q_CPP(ElaMessageButton, int, BorderRadius)
|
||||
Q_PROPERTY_CREATE_Q_CPP(ElaMessageButton, QString, BarTitle);
|
||||
Q_PROPERTY_CREATE_Q_CPP(ElaMessageButton, QString, BarText);
|
||||
Q_PROPERTY_CREATE_Q_CPP(ElaMessageButton, int, DisplayMsec);
|
||||
Q_PROPERTY_CREATE_Q_CPP(ElaMessageButton, QWidget*, MessageTargetWidget)
|
||||
Q_PROPERTY_CREATE_Q_CPP(ElaMessageButton, ElaMessageBarType::MessageMode, MessageMode);
|
||||
Q_PROPERTY_CREATE_Q_CPP(ElaMessageButton, ElaMessageBarType::PositionPolicy, PositionPolicy);
|
||||
|
||||
ElaMessageButton::ElaMessageButton(QWidget* parent)
|
||||
: QPushButton(parent), d_ptr(new ElaMessageButtonPrivate())
|
||||
{
|
||||
Q_D(ElaMessageButton);
|
||||
d->q_ptr = this;
|
||||
d->_pBorderRadius = 3;
|
||||
setMouseTracking(true);
|
||||
setFixedSize(80, 38);
|
||||
QFont font = this->font();
|
||||
font.setPixelSize(15);
|
||||
setFont(font);
|
||||
setText("Message");
|
||||
setObjectName("ElaMessageButton");
|
||||
setStyleSheet("#ElaMessageButton{background-color:transparent;}");
|
||||
d->_pDisplayMsec = 2000;
|
||||
d->_pMessageMode = ElaMessageBarType::Success;
|
||||
d->_pPositionPolicy = ElaMessageBarType::TopRight;
|
||||
d->_themeMode = eTheme->getThemeMode();
|
||||
d->_pMessageTargetWidget = nullptr;
|
||||
connect(eTheme, &ElaTheme::themeModeChanged, this, [=](ElaThemeType::ThemeMode themeMode) {
|
||||
d->_themeMode = themeMode;
|
||||
});
|
||||
connect(this, &ElaMessageButton::clicked, this, [=]() {
|
||||
switch(d->_pMessageMode)
|
||||
{
|
||||
case ElaMessageBarType::Success:
|
||||
{
|
||||
ElaMessageBar::success(d->_pPositionPolicy,d->_pBarTitle,d->_pBarText,d->_pDisplayMsec,d->_pMessageTargetWidget);
|
||||
break;
|
||||
}
|
||||
case ElaMessageBarType::Warning:
|
||||
{
|
||||
ElaMessageBar::warning(d->_pPositionPolicy,d->_pBarTitle,d->_pBarText,d->_pDisplayMsec,d->_pMessageTargetWidget);
|
||||
break;
|
||||
}
|
||||
case ElaMessageBarType::Information:
|
||||
{
|
||||
ElaMessageBar::information(d->_pPositionPolicy,d->_pBarTitle,d->_pBarText,d->_pDisplayMsec,d->_pMessageTargetWidget);
|
||||
break;
|
||||
}
|
||||
case ElaMessageBarType::Error:
|
||||
{
|
||||
ElaMessageBar::error(d->_pPositionPolicy,d->_pBarTitle,d->_pBarText,d->_pDisplayMsec,d->_pMessageTargetWidget);
|
||||
break;
|
||||
}
|
||||
} });
|
||||
}
|
||||
|
||||
ElaMessageButton::ElaMessageButton(QString text, QWidget* parent)
|
||||
: ElaMessageButton(parent)
|
||||
{
|
||||
setText(text);
|
||||
}
|
||||
|
||||
ElaMessageButton::~ElaMessageButton()
|
||||
{
|
||||
}
|
||||
|
||||
void ElaMessageButton::mousePressEvent(QMouseEvent* event)
|
||||
{
|
||||
Q_D(ElaMessageButton);
|
||||
if (event->button() == Qt::LeftButton)
|
||||
{
|
||||
d->_isLeftButtonPress = true;
|
||||
}
|
||||
QPushButton::mousePressEvent(event);
|
||||
}
|
||||
|
||||
void ElaMessageButton::mouseReleaseEvent(QMouseEvent* event)
|
||||
{
|
||||
Q_D(ElaMessageButton);
|
||||
d->_isLeftButtonPress = false;
|
||||
QPushButton::mouseReleaseEvent(event);
|
||||
}
|
||||
|
||||
void ElaMessageButton::paintEvent(QPaintEvent* event)
|
||||
{
|
||||
Q_D(ElaMessageButton);
|
||||
QPainter painter(this);
|
||||
painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing | QPainter::TextAntialiasing);
|
||||
// 高性能阴影
|
||||
eTheme->drawEffectShadow(&painter, rect(), d->_shadowBorderWidth, d->_pBorderRadius);
|
||||
|
||||
// 背景绘制
|
||||
painter.save();
|
||||
QRect foregroundRect(d->_penBorderWidth + d->_shadowBorderWidth, d->_penBorderWidth + d->_shadowBorderWidth, width() - 2 * (d->_penBorderWidth + d->_shadowBorderWidth), height() - 2 * (d->_penBorderWidth + d->_shadowBorderWidth));
|
||||
painter.setPen(QPen(ElaThemeColor(d->_themeMode, BasicBorder), d->_penBorderWidth));
|
||||
painter.setBrush(isEnabled() ? underMouse() ? ElaThemeColor(d->_themeMode, BasicHover) : ElaThemeColor(d->_themeMode, BasicBase) : ElaThemeColor(d->_themeMode, BasicDisable));
|
||||
painter.drawRoundedRect(foregroundRect, d->_pBorderRadius, d->_pBorderRadius);
|
||||
|
||||
//文字绘制
|
||||
painter.setPen(isEnabled() ? d->_isLeftButtonPress ? ElaThemeColor(d->_themeMode, BasicTextPress) : ElaThemeColor(d->_themeMode, BasicText) : ElaThemeColor(d->_themeMode, BasicTextDisable));
|
||||
painter.drawText(rect(), Qt::AlignCenter, text());
|
||||
painter.restore();
|
||||
}
|
||||
Reference in New Issue
Block a user