feat: 添加ElaWidgetTool库
This commit is contained in:
64
ElaWidgetTools/ElaImageCard.cpp
Normal file
64
ElaWidgetTools/ElaImageCard.cpp
Normal file
@@ -0,0 +1,64 @@
|
||||
#include "ElaImageCard.h"
|
||||
|
||||
#include <QGraphicsDropShadowEffect>
|
||||
#include <QPainter>
|
||||
#include <QPainterPath>
|
||||
|
||||
#include "ElaImageCardPrivate.h"
|
||||
#include "ElaTheme.h"
|
||||
|
||||
Q_PROPERTY_CREATE_Q_CPP(ElaImageCard, QImage, CardImage);
|
||||
Q_PROPERTY_CREATE_Q_CPP(ElaImageCard, int, BorderRadius)
|
||||
Q_PROPERTY_CREATE_Q_CPP(ElaImageCard, bool, IsPreserveAspectCrop)
|
||||
Q_PROPERTY_CREATE_Q_CPP(ElaImageCard, qreal, MaximumAspectRatio)
|
||||
ElaImageCard::ElaImageCard(QWidget* parent)
|
||||
: QWidget(parent), d_ptr(new ElaImageCardPrivate())
|
||||
{
|
||||
Q_D(ElaImageCard);
|
||||
d->q_ptr = this;
|
||||
d->_pBorderRadius = 6;
|
||||
d->_pMaximumAspectRatio = 2.2;
|
||||
d->_pIsPreserveAspectCrop = true;
|
||||
setMinimumSize(350, 260);
|
||||
d->_themeMode = eTheme->getThemeMode();
|
||||
connect(eTheme, &ElaTheme::themeModeChanged, this, [=](ElaThemeType::ThemeMode themeMode) {
|
||||
d->_themeMode = themeMode;
|
||||
});
|
||||
}
|
||||
|
||||
ElaImageCard::~ElaImageCard()
|
||||
{
|
||||
}
|
||||
|
||||
void ElaImageCard::paintEvent(QPaintEvent* event)
|
||||
{
|
||||
Q_D(ElaImageCard);
|
||||
QPainter painter(this);
|
||||
painter.save();
|
||||
painter.setPen(Qt::NoPen);
|
||||
painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing);
|
||||
QPainterPath path;
|
||||
path.addRoundedRect(rect(), d->_pBorderRadius, d->_pBorderRadius);
|
||||
painter.setClipPath(path);
|
||||
// 图片绘制
|
||||
if (d->_pIsPreserveAspectCrop)
|
||||
{
|
||||
qreal itemAspectRatio = (qreal)rect().width() / rect().height();
|
||||
if (itemAspectRatio < d->_pMaximumAspectRatio)
|
||||
{
|
||||
itemAspectRatio = d->_pMaximumAspectRatio;
|
||||
qreal cropHeight = d->_pCardImage.width() / itemAspectRatio;
|
||||
painter.drawImage(QRect(0, 0, this->height() * d->_pMaximumAspectRatio, rect().height()), d->_pCardImage, QRectF(0, 0, d->_pCardImage.width(), cropHeight));
|
||||
}
|
||||
else
|
||||
{
|
||||
qreal cropHeight = d->_pCardImage.width() / itemAspectRatio;
|
||||
painter.drawImage(rect(), d->_pCardImage, QRectF(0, 0, d->_pCardImage.width(), cropHeight));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
painter.drawImage(rect(), d->_pCardImage);
|
||||
}
|
||||
painter.restore();
|
||||
}
|
||||
Reference in New Issue
Block a user