From d42fa35c42e4306f56e464d1a2fcdca1e9e4ba4d Mon Sep 17 00:00:00 2001 From: laserpants Date: Fri, 17 Jun 2016 16:09:19 +0300 Subject: [PATCH] implement basic Avatar --- components/avatar.cpp | 62 +++++++++++++++++++++++++++++++--------- components/avatar.h | 16 +++++++++-- components/avatar_p.h | 22 ++++++++++++++ qt-material-widgets.pro | 3 +- uxceo-128.jpg | Bin 0 -> 5157 bytes 5 files changed, 87 insertions(+), 16 deletions(-) create mode 100644 components/avatar_p.h create mode 100644 uxceo-128.jpg diff --git a/components/avatar.cpp b/components/avatar.cpp index 495bcf4..92f6240 100644 --- a/components/avatar.cpp +++ b/components/avatar.cpp @@ -1,28 +1,39 @@ #include #include +#include #include "avatar.h" +#include "avatar_p.h" + +AvatarPrivate::AvatarPrivate(Avatar *q) + : q_ptr(q), + size(40) +{ +} + +void AvatarPrivate::init() +{ + Q_Q(Avatar); + + QFont font(q->font()); + font.setPointSizeF(16); + q->setFont(font); +} Avatar::Avatar(QWidget *parent) - : QWidget(parent) + : QWidget(parent), + d_ptr(new AvatarPrivate(this)) { + d_func()->init(); } Avatar::~Avatar() { } -void Avatar::mousePressEvent(QMouseEvent *event) -{ - QWidget::mousePressEvent(event); -} - -void Avatar::mouseReleaseEvent(QMouseEvent *event) -{ - QWidget::mouseReleaseEvent(event); -} - void Avatar::paintEvent(QPaintEvent *event) { + Q_UNUSED(event) + QPainter painter(this); painter.drawRect(rect().adjusted(0, 0, -1, -1)); @@ -31,12 +42,37 @@ void Avatar::paintEvent(QPaintEvent *event) QBrush brush; brush.setStyle(Qt::SolidPattern); - painter.setPen(Qt::NoPen); painter.setBrush(brush); QRect r = rect(); painter.drawEllipse(r.center(), 20, 20); - QWidget::paintEvent(event); + //painter.setPen(textColor()); + painter.setPen(Qt::white); + painter.setBrush(Qt::NoBrush); + painter.drawText(r.translated(0, -1), Qt::AlignCenter, "A"); + + return;// + QIcon icon("../qt-material-widgets/ic_message_white_24px.svg"); + + icon.paint(&painter, + QRect(width()/2-10, height()/2-10, 20, 20), + Qt::AlignCenter, + QIcon::Normal); + + // + + QImage img("../qt-material-widgets/uxceo-128.jpg"); + + QPixmap pm = QPixmap::fromImage(img.scaled(40, + 40, + Qt::IgnoreAspectRatio, + Qt::SmoothTransformation)); + + QPainterPath path; + path.addEllipse(width()/2-20, height()/2-20, 40, 40); + painter.setClipPath(path); + + painter.drawPixmap(QRect(width()/2-20, height()/2-20, 40, 40), pm); } diff --git a/components/avatar.h b/components/avatar.h index 1ce6fbb..82b8f09 100644 --- a/components/avatar.h +++ b/components/avatar.h @@ -3,18 +3,30 @@ #include +class AvatarPrivate; + class Avatar : public QWidget { Q_OBJECT + enum AvatarType { + ImageAvatar, + IconAvatar, + LetterAvatar + }; + public: explicit Avatar(QWidget *parent = 0); ~Avatar(); protected: - void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; - void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + + const QScopedPointer d_ptr; + +private: + Q_DISABLE_COPY(Avatar) + Q_DECLARE_PRIVATE(Avatar) }; #endif // AVATAR_H diff --git a/components/avatar_p.h b/components/avatar_p.h new file mode 100644 index 0000000..7b5102a --- /dev/null +++ b/components/avatar_p.h @@ -0,0 +1,22 @@ +#ifndef AVATAR_P_H +#define AVATAR_P_H + +#include + +class Avatar; + +class AvatarPrivate +{ + Q_DISABLE_COPY(AvatarPrivate) + Q_DECLARE_PUBLIC(Avatar) + +public: + AvatarPrivate(Avatar *q); + + void init(); + + Avatar *const q_ptr; + int size; +}; + +#endif // AVATAR_P_H diff --git a/qt-material-widgets.pro b/qt-material-widgets.pro index 8ab6c08..d9dd055 100644 --- a/qt-material-widgets.pro +++ b/qt-material-widgets.pro @@ -136,7 +136,8 @@ HEADERS += mainwindow.h \ components/textfield_p.h \ components/textfield_internal.h \ components/badge_p.h \ - components/drawer.h + components/drawer.h \ + components/avatar_p.h RESOURCES += \ resources.qrc diff --git a/uxceo-128.jpg b/uxceo-128.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fdf962529f370c15e00178cc6823596e7cd2ac0b GIT binary patch literal 5157 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 V+lw?H?@KqhDO$JsBa8QE{tJJPhuHuC literal 0 HcmV?d00001