From 5d8cc368fc133895b79733e3715d4fa2642540bb Mon Sep 17 00:00:00 2001 From: laserpants Date: Thu, 14 Apr 2016 16:47:27 +0300 Subject: [PATCH 1/7] add more boilerplate code --- .gitignore | 1 + components/checkbox.cpp | 30 ++++++++++++++++++++++++++++++ components/checkbox.h | 20 ++++++++++++++++++++ components/list.cpp | 30 ++++++++++++++++++++++++++++++ components/list.h | 20 ++++++++++++++++++++ components/radiobutton.cpp | 30 ++++++++++++++++++++++++++++++ components/radiobutton.h | 20 ++++++++++++++++++++ components/textfield.cpp | 30 ++++++++++++++++++++++++++++++ components/textfield.h | 20 ++++++++++++++++++++ examples/checkboxexamples.cpp | 31 +++++++++++++++++++++++++++++++ examples/checkboxexamples.h | 15 +++++++++++++++ examples/listexamples.cpp | 31 +++++++++++++++++++++++++++++++ examples/listexamples.h | 15 +++++++++++++++ examples/radiobuttonexamples.cpp | 31 +++++++++++++++++++++++++++++++ examples/radiobuttonexamples.h | 15 +++++++++++++++ examples/textfieldexamples.cpp | 31 +++++++++++++++++++++++++++++++ examples/textfieldexamples.h | 15 +++++++++++++++ mainwindow.cpp | 25 +++++++++++++++++++++++++ mainwindow.h | 8 ++++++++ qt-material-widgets.pro | 12 ++++++++++-- 20 files changed, 428 insertions(+), 2 deletions(-) create mode 100644 examples/checkboxexamples.cpp create mode 100644 examples/checkboxexamples.h create mode 100644 examples/listexamples.cpp create mode 100644 examples/listexamples.h create mode 100644 examples/radiobuttonexamples.cpp create mode 100644 examples/radiobuttonexamples.h create mode 100644 examples/textfieldexamples.cpp create mode 100644 examples/textfieldexamples.h diff --git a/.gitignore b/.gitignore index c1b62a8..4b6e591 100755 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.pro.user *.pro.user.* +*.svg diff --git a/components/checkbox.cpp b/components/checkbox.cpp index a66497e..e53f870 100644 --- a/components/checkbox.cpp +++ b/components/checkbox.cpp @@ -1 +1,31 @@ +#include +#include #include "checkbox.h" + +Checkbox::Checkbox(QWidget *parent) + : QWidget(parent) +{ +} + +Checkbox::~Checkbox() +{ +} + +void Checkbox::mousePressEvent(QMouseEvent *event) +{ + QWidget::mousePressEvent(event); +} + +void Checkbox::mouseReleaseEvent(QMouseEvent *event) +{ + QWidget::mouseReleaseEvent(event); +} + +void Checkbox::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + + painter.drawRect(0, 0, 50, 50); + + QWidget::paintEvent(event); +} diff --git a/components/checkbox.h b/components/checkbox.h index e69de29..540910b 100644 --- a/components/checkbox.h +++ b/components/checkbox.h @@ -0,0 +1,20 @@ +#ifndef CHECKBOX_H +#define CHECKBOX_H + +#include + +class Checkbox : public QWidget +{ + Q_OBJECT + +public: + explicit Checkbox(QWidget *parent = 0); + ~Checkbox(); + +protected: + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; +}; + +#endif // CHECKBOX_H diff --git a/components/list.cpp b/components/list.cpp index 471c2a1..1356242 100644 --- a/components/list.cpp +++ b/components/list.cpp @@ -1 +1,31 @@ +#include +#include #include "list.h" + +List::List(QWidget *parent) + : QWidget(parent) +{ +} + +List::~List() +{ +} + +void List::mousePressEvent(QMouseEvent *event) +{ + QWidget::mousePressEvent(event); +} + +void List::mouseReleaseEvent(QMouseEvent *event) +{ + QWidget::mouseReleaseEvent(event); +} + +void List::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + + painter.drawRect(50, 250, 50, 50); + + QWidget::paintEvent(event); +} diff --git a/components/list.h b/components/list.h index e69de29..25101b2 100644 --- a/components/list.h +++ b/components/list.h @@ -0,0 +1,20 @@ +#ifndef LIST_H +#define LIST_H + +#include + +class List : public QWidget +{ + Q_OBJECT + +public: + explicit List(QWidget *parent = 0); + ~List(); + +protected: + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; +}; + +#endif // LIST_H diff --git a/components/radiobutton.cpp b/components/radiobutton.cpp index 9ac4161..df5ec8c 100644 --- a/components/radiobutton.cpp +++ b/components/radiobutton.cpp @@ -1 +1,31 @@ +#include +#include #include "radiobutton.h" + +RadioButton::RadioButton(QWidget *parent) + : QWidget(parent) +{ +} + +RadioButton::~RadioButton() +{ +} + +void RadioButton::mousePressEvent(QMouseEvent *event) +{ + QWidget::mousePressEvent(event); +} + +void RadioButton::mouseReleaseEvent(QMouseEvent *event) +{ + QWidget::mouseReleaseEvent(event); +} + +void RadioButton::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + + painter.drawRect(0, 50, 50, 50); + + QWidget::paintEvent(event); +} diff --git a/components/radiobutton.h b/components/radiobutton.h index e69de29..c5d6d42 100644 --- a/components/radiobutton.h +++ b/components/radiobutton.h @@ -0,0 +1,20 @@ +#ifndef RADIOBUTTON_H +#define RADIOBUTTON_H + +#include + +class RadioButton : public QWidget +{ + Q_OBJECT + +public: + explicit RadioButton(QWidget *parent = 0); + ~RadioButton(); + +protected: + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; +}; + +#endif // RADIOBUTTON_H diff --git a/components/textfield.cpp b/components/textfield.cpp index 5d5bbea..3e98b66 100644 --- a/components/textfield.cpp +++ b/components/textfield.cpp @@ -1 +1,31 @@ +#include +#include #include "textfield.h" + +TextField::TextField(QWidget *parent) + : QWidget(parent) +{ +} + +TextField::~TextField() +{ +} + +void TextField::mousePressEvent(QMouseEvent *event) +{ + QWidget::mousePressEvent(event); +} + +void TextField::mouseReleaseEvent(QMouseEvent *event) +{ + QWidget::mouseReleaseEvent(event); +} + +void TextField::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + + painter.drawRect(40, 0, 50, 50); + + QWidget::paintEvent(event); +} diff --git a/components/textfield.h b/components/textfield.h index e69de29..93ead49 100644 --- a/components/textfield.h +++ b/components/textfield.h @@ -0,0 +1,20 @@ +#ifndef TEXTFIELD_H +#define TEXTFIELD_H + +#include + +class TextField : public QWidget +{ + Q_OBJECT + +public: + explicit TextField(QWidget *parent = 0); + ~TextField(); + +protected: + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; +}; + +#endif // TEXTFIELD_H diff --git a/examples/checkboxexamples.cpp b/examples/checkboxexamples.cpp new file mode 100644 index 0000000..bb7c51a --- /dev/null +++ b/examples/checkboxexamples.cpp @@ -0,0 +1,31 @@ +#include +#include +#include "checkboxexamples.h" +#include "components/checkbox.h" +#include "exampleview.h" +#include "frame.h" + +CheckboxExamples::CheckboxExamples(QWidget *parent) + : ExampleList(parent) +{ + QLayout *layout = widget()->layout(); + + { + Checkbox *checkbox = new Checkbox; + + ExampleView *view = new ExampleView; + view->setWidget(checkbox); + + Frame *frame = new Frame; + frame->setCodeSnippet( + "hello" + ); + frame->setWidget(view); + + layout->addWidget(frame); + } +} + +CheckboxExamples::~CheckboxExamples() +{ +} diff --git a/examples/checkboxexamples.h b/examples/checkboxexamples.h new file mode 100644 index 0000000..367771d --- /dev/null +++ b/examples/checkboxexamples.h @@ -0,0 +1,15 @@ +#ifndef CHECKBOXEXAMPLES_H +#define CHECKBOXEXAMPLES_H + +#include "examplelist.h" + +class CheckboxExamples : public ExampleList +{ + Q_OBJECT + +public: + explicit CheckboxExamples(QWidget *parent = 0); + ~CheckboxExamples(); +}; + +#endif // CHECKBOXEXAMPLES_H diff --git a/examples/listexamples.cpp b/examples/listexamples.cpp new file mode 100644 index 0000000..58ff66b --- /dev/null +++ b/examples/listexamples.cpp @@ -0,0 +1,31 @@ +#include +#include +#include "listexamples.h" +#include "components/list.h" +#include "exampleview.h" +#include "frame.h" + +ListExamples::ListExamples(QWidget *parent) + : ExampleList(parent) +{ + QLayout *layout = widget()->layout(); + + { + List *list = new List; + + ExampleView *view = new ExampleView; + view->setWidget(list); + + Frame *frame = new Frame; + frame->setCodeSnippet( + "hello" + ); + frame->setWidget(view); + + layout->addWidget(frame); + } +} + +ListExamples::~ListExamples() +{ +} diff --git a/examples/listexamples.h b/examples/listexamples.h new file mode 100644 index 0000000..7872afa --- /dev/null +++ b/examples/listexamples.h @@ -0,0 +1,15 @@ +#ifndef LISTEXAMPLES_H +#define LISTEXAMPLES_H + +#include "examplelist.h" + +class ListExamples : public ExampleList +{ + Q_OBJECT + +public: + explicit ListExamples(QWidget *parent = 0); + ~ListExamples(); +}; + +#endif // LISTEXAMPLES_H diff --git a/examples/radiobuttonexamples.cpp b/examples/radiobuttonexamples.cpp new file mode 100644 index 0000000..81c5d60 --- /dev/null +++ b/examples/radiobuttonexamples.cpp @@ -0,0 +1,31 @@ +#include +#include +#include "radiobuttonexamples.h" +#include "components/radiobutton.h" +#include "exampleview.h" +#include "frame.h" + +RadioButtonExamples::RadioButtonExamples(QWidget *parent) + : ExampleList(parent) +{ + QLayout *layout = widget()->layout(); + + { + RadioButton *radioButton = new RadioButton; + + ExampleView *view = new ExampleView; + view->setWidget(radioButton); + + Frame *frame = new Frame; + frame->setCodeSnippet( + "hello" + ); + frame->setWidget(view); + + layout->addWidget(frame); + } +} + +RadioButtonExamples::~RadioButtonExamples() +{ +} diff --git a/examples/radiobuttonexamples.h b/examples/radiobuttonexamples.h new file mode 100644 index 0000000..3991c4c --- /dev/null +++ b/examples/radiobuttonexamples.h @@ -0,0 +1,15 @@ +#ifndef RADIOBUTTONEXAMPLES_H +#define RADIOBUTTONEXAMPLES_H + +#include "examplelist.h" + +class RadioButtonExamples : public ExampleList +{ + Q_OBJECT + +public: + explicit RadioButtonExamples(QWidget *parent = 0); + ~RadioButtonExamples(); +}; + +#endif // RADIOBUTTONEXAMPLES_H diff --git a/examples/textfieldexamples.cpp b/examples/textfieldexamples.cpp new file mode 100644 index 0000000..2f0a07c --- /dev/null +++ b/examples/textfieldexamples.cpp @@ -0,0 +1,31 @@ +#include +#include +#include "textfieldexamples.h" +#include "components/textfield.h" +#include "exampleview.h" +#include "frame.h" + +TextFieldExamples::TextFieldExamples(QWidget *parent) + : ExampleList(parent) +{ + QLayout *layout = widget()->layout(); + + { + TextField *textField = new TextField; + + ExampleView *view = new ExampleView; + view->setWidget(textField); + + Frame *frame = new Frame; + frame->setCodeSnippet( + "hello" + ); + frame->setWidget(view); + + layout->addWidget(frame); + } +} + +TextFieldExamples::~TextFieldExamples() +{ +} diff --git a/examples/textfieldexamples.h b/examples/textfieldexamples.h new file mode 100644 index 0000000..30eae45 --- /dev/null +++ b/examples/textfieldexamples.h @@ -0,0 +1,15 @@ +#ifndef TEXTFIELDEXAMPLES_H +#define TEXTFIELDEXAMPLES_H + +#include "examplelist.h" + +class TextFieldExamples : public ExampleList +{ + Q_OBJECT + +public: + explicit TextFieldExamples(QWidget *parent = 0); + ~TextFieldExamples(); +}; + +#endif // TEXTFIELDEXAMPLES_H diff --git a/mainwindow.cpp b/mainwindow.cpp index 12e2b67..565d14d 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -12,6 +13,10 @@ #include "examples/tableexamples.h" #include "examples/sliderexamples.h" #include "examples/toggleexamples.h" +#include "examples/radiobuttonexamples.h" +#include "examples/checkboxexamples.h" +#include "examples/textfieldexamples.h" +#include "examples/listexamples.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), @@ -24,6 +29,10 @@ MainWindow::MainWindow(QWidget *parent) _tableExamples(new TableExamples), _sliderExamples(new SliderExamples), _toggleExamples(new ToggleExamples), + _radioButtonExamples(new RadioButtonExamples), + _checkboxExamples(new CheckboxExamples), + _textFieldExamples(new TextFieldExamples), + _listExamples(new ListExamples), _about(new About) { _initWidget(); @@ -53,6 +62,14 @@ void MainWindow::showWidget(QAction *action) _layout->setCurrentWidget(_sliderExamples); } else if ("Toggle" == text) { _layout->setCurrentWidget(_toggleExamples); + } else if ("Radio Button" == text) { + _layout->setCurrentWidget(_radioButtonExamples); + } else if ("Checkbox" == text) { + _layout->setCurrentWidget(_checkboxExamples); + } else if ("Text Field" == text) { + _layout->setCurrentWidget(_textFieldExamples); + } else if ("List" == text) { + _layout->setCurrentWidget(_listExamples); } else { _layout->setCurrentWidget(_about); } @@ -72,6 +89,10 @@ void MainWindow::_initWidget() _layout->addWidget(_tableExamples); _layout->addWidget(_sliderExamples); _layout->addWidget(_toggleExamples); + _layout->addWidget(_radioButtonExamples); + _layout->addWidget(_checkboxExamples); + _layout->addWidget(_textFieldExamples); + _layout->addWidget(_listExamples); setCentralWidget(widget); } @@ -79,6 +100,9 @@ void MainWindow::_initWidget() void MainWindow::_initMenu() const { QMenu *file = new QMenu("&File"); + + QAction *exitAction = file->addAction("E&xit"); + QMenu *components = new QMenu("&Components"); QMenu *settings = new QMenu("&Settings"); QMenu *examples = new QMenu("&Examples"); @@ -116,4 +140,5 @@ void MainWindow::_initMenu() const menuBar()->addMenu(help); connect(components, SIGNAL(triggered(QAction *)), this, SLOT(showWidget(QAction *))); + connect(exitAction, SIGNAL(triggered(bool)), qApp, SLOT(quit())); } diff --git a/mainwindow.h b/mainwindow.h index db6afc6..e2b6ed4 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -12,6 +12,10 @@ class TabsExamples; class TableExamples; class SliderExamples; class ToggleExamples; +class RadioButtonExamples; +class CheckboxExamples; +class TextFieldExamples; +class ListExamples; class QStackedLayout; class MainWindow : public QMainWindow @@ -38,6 +42,10 @@ private: TableExamples *const _tableExamples; SliderExamples *const _sliderExamples; ToggleExamples *const _toggleExamples; + RadioButtonExamples *const _radioButtonExamples; + CheckboxExamples *const _checkboxExamples; + TextFieldExamples *const _textFieldExamples; + ListExamples *const _listExamples; About *const _about; }; diff --git a/qt-material-widgets.pro b/qt-material-widgets.pro index b23e922..de28843 100644 --- a/qt-material-widgets.pro +++ b/qt-material-widgets.pro @@ -39,7 +39,11 @@ SOURCES += main.cpp\ examples/raisedbuttonexamples.cpp \ examples/sliderexamples.cpp \ components/toggle.cpp \ - examples/toggleexamples.cpp + examples/toggleexamples.cpp \ + examples/radiobuttonexamples.cpp \ + examples/checkboxexamples.cpp \ + examples/textfieldexamples.cpp \ + examples/listexamples.cpp HEADERS += mainwindow.h \ style.h \ @@ -72,4 +76,8 @@ HEADERS += mainwindow.h \ examples/raisedbuttonexamples.h \ examples/sliderexamples.h \ components/toggle.h \ - examples/toggleexamples.h + examples/toggleexamples.h \ + examples/radiobuttonexamples.h \ + examples/checkboxexamples.h \ + examples/textfieldexamples.h \ + examples/listexamples.h From bde2125000e60d79237d41e2e08c8925e5749c8f Mon Sep 17 00:00:00 2001 From: laserpants Date: Thu, 14 Apr 2016 17:11:41 +0300 Subject: [PATCH 2/7] make TextField inherit QLineEdit --- components/textfield.cpp | 15 ++++++++------- components/textfield.h | 4 ++-- examples/textfieldexamples.cpp | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/components/textfield.cpp b/components/textfield.cpp index 3e98b66..49efe06 100644 --- a/components/textfield.cpp +++ b/components/textfield.cpp @@ -1,10 +1,12 @@ #include #include #include "textfield.h" +#include "style.h" TextField::TextField(QWidget *parent) - : QWidget(parent) + : QLineEdit(parent) { + setStyle(&Style::instance()); } TextField::~TextField() @@ -13,19 +15,18 @@ TextField::~TextField() void TextField::mousePressEvent(QMouseEvent *event) { - QWidget::mousePressEvent(event); + QLineEdit::mousePressEvent(event); } void TextField::mouseReleaseEvent(QMouseEvent *event) { - QWidget::mouseReleaseEvent(event); + QLineEdit::mouseReleaseEvent(event); } void TextField::paintEvent(QPaintEvent *event) { + QLineEdit::paintEvent(event); + QPainter painter(this); - - painter.drawRect(40, 0, 50, 50); - - QWidget::paintEvent(event); + painter.drawRect(0, 0, 50, 50); } diff --git a/components/textfield.h b/components/textfield.h index 93ead49..3831f87 100644 --- a/components/textfield.h +++ b/components/textfield.h @@ -1,9 +1,9 @@ #ifndef TEXTFIELD_H #define TEXTFIELD_H -#include +#include -class TextField : public QWidget +class TextField : public QLineEdit { Q_OBJECT diff --git a/examples/textfieldexamples.cpp b/examples/textfieldexamples.cpp index 2f0a07c..35c0b08 100644 --- a/examples/textfieldexamples.cpp +++ b/examples/textfieldexamples.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "textfieldexamples.h" #include "components/textfield.h" #include "exampleview.h" @@ -22,6 +23,20 @@ TextFieldExamples::TextFieldExamples(QWidget *parent) ); frame->setWidget(view); + layout->addWidget(frame); + } + { + QLineEdit *edit = new QLineEdit; + + ExampleView *view = new ExampleView; + view->setWidget(edit); + + Frame *frame = new Frame; + frame->setCodeSnippet( + "hello" + ); + frame->setWidget(view); + layout->addWidget(frame); } } From 0f6d9f6aa9aa4404ecdf6dc8cadfa4c230c6b7eb Mon Sep 17 00:00:00 2001 From: laserpants Date: Thu, 14 Apr 2016 17:21:28 +0300 Subject: [PATCH 3/7] add boilerplate for Avatar component --- components/avatar.cpp | 31 +++++++++++++++++++++++++++++++ components/avatar.h | 20 ++++++++++++++++++++ examples/avatarexamples.cpp | 30 ++++++++++++++++++++++++++++++ examples/avatarexamples.h | 15 +++++++++++++++ mainwindow.cpp | 6 ++++++ mainwindow.h | 2 ++ qt-material-widgets.pro | 8 ++++++-- 7 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 components/avatar.cpp create mode 100644 components/avatar.h create mode 100644 examples/avatarexamples.cpp create mode 100644 examples/avatarexamples.h diff --git a/components/avatar.cpp b/components/avatar.cpp new file mode 100644 index 0000000..16fb09b --- /dev/null +++ b/components/avatar.cpp @@ -0,0 +1,31 @@ +#include +#include +#include "avatar.h" + +Avatar::Avatar(QWidget *parent) + : QWidget(parent) +{ +} + +Avatar::~Avatar() +{ +} + +void Avatar::mousePressEvent(QMouseEvent *event) +{ + QWidget::mousePressEvent(event); +} + +void Avatar::mouseReleaseEvent(QMouseEvent *event) +{ + QWidget::mouseReleaseEvent(event); +} + +void Avatar::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + + painter.drawRect(0, 50, 50, 50); + + QWidget::paintEvent(event); +} diff --git a/components/avatar.h b/components/avatar.h new file mode 100644 index 0000000..1ce6fbb --- /dev/null +++ b/components/avatar.h @@ -0,0 +1,20 @@ +#ifndef AVATAR_H +#define AVATAR_H + +#include + +class Avatar : public QWidget +{ + Q_OBJECT + +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; +}; + +#endif // AVATAR_H diff --git a/examples/avatarexamples.cpp b/examples/avatarexamples.cpp new file mode 100644 index 0000000..91a2c69 --- /dev/null +++ b/examples/avatarexamples.cpp @@ -0,0 +1,30 @@ +#include +#include +#include "avatarexamples.h" +#include "components/avatar.h" +#include "exampleview.h" +#include "frame.h" + +AvatarExamples::AvatarExamples(QWidget *parent) + : ExampleList(parent) +{ + QLayout *layout = widget()->layout(); + + { + Avatar *avatar = new Avatar; + + ExampleView *view = new ExampleView; + view->setWidget(avatar); + + Frame *frame = new Frame; + frame->setCodeSnippet( + "hello" + ); + frame->setWidget(view); + + layout->addWidget(frame); + } } + +AvatarExamples::~AvatarExamples() +{ +} diff --git a/examples/avatarexamples.h b/examples/avatarexamples.h new file mode 100644 index 0000000..63dfecd --- /dev/null +++ b/examples/avatarexamples.h @@ -0,0 +1,15 @@ +#ifndef AVATAREXAMPLES_H +#define AVATAREXAMPLES_H + +#include "examplelist.h" + +class AvatarExamples : public ExampleList +{ + Q_OBJECT + +public: + explicit AvatarExamples(QWidget *parent = 0); + ~AvatarExamples(); +}; + +#endif // AVATAREXAMPLES_H diff --git a/mainwindow.cpp b/mainwindow.cpp index 565d14d..0d1d2e6 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -17,6 +17,7 @@ #include "examples/checkboxexamples.h" #include "examples/textfieldexamples.h" #include "examples/listexamples.h" +#include "examples/avatarexamples.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), @@ -33,6 +34,7 @@ MainWindow::MainWindow(QWidget *parent) _checkboxExamples(new CheckboxExamples), _textFieldExamples(new TextFieldExamples), _listExamples(new ListExamples), + _avatarExamples(new AvatarExamples), _about(new About) { _initWidget(); @@ -70,6 +72,8 @@ void MainWindow::showWidget(QAction *action) _layout->setCurrentWidget(_textFieldExamples); } else if ("List" == text) { _layout->setCurrentWidget(_listExamples); + } else if ("Avatar" == text) { + _layout->setCurrentWidget(_avatarExamples); } else { _layout->setCurrentWidget(_about); } @@ -93,6 +97,7 @@ void MainWindow::_initWidget() _layout->addWidget(_checkboxExamples); _layout->addWidget(_textFieldExamples); _layout->addWidget(_listExamples); + _layout->addWidget(_avatarExamples); setCentralWidget(widget); } @@ -109,6 +114,7 @@ void MainWindow::_initMenu() const QMenu *help = new QMenu("&Help"); components->addAction("App Bar"); + components->addAction("Avatar"); QMenu *buttons = new QMenu("Buttons"); components->addMenu(buttons); diff --git a/mainwindow.h b/mainwindow.h index e2b6ed4..e7eab28 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -16,6 +16,7 @@ class RadioButtonExamples; class CheckboxExamples; class TextFieldExamples; class ListExamples; +class AvatarExamples; class QStackedLayout; class MainWindow : public QMainWindow @@ -46,6 +47,7 @@ private: CheckboxExamples *const _checkboxExamples; TextFieldExamples *const _textFieldExamples; ListExamples *const _listExamples; + AvatarExamples *const _avatarExamples; About *const _about; }; diff --git a/qt-material-widgets.pro b/qt-material-widgets.pro index de28843..fca4fff 100644 --- a/qt-material-widgets.pro +++ b/qt-material-widgets.pro @@ -43,7 +43,9 @@ SOURCES += main.cpp\ examples/radiobuttonexamples.cpp \ examples/checkboxexamples.cpp \ examples/textfieldexamples.cpp \ - examples/listexamples.cpp + examples/listexamples.cpp \ + components/avatar.cpp \ + examples/avatarexamples.cpp HEADERS += mainwindow.h \ style.h \ @@ -80,4 +82,6 @@ HEADERS += mainwindow.h \ examples/radiobuttonexamples.h \ examples/checkboxexamples.h \ examples/textfieldexamples.h \ - examples/listexamples.h + examples/listexamples.h \ + components/avatar.h \ + examples/avatarexamples.h From 2b1556d2a34e793f82bb52d336441940c88a84ac Mon Sep 17 00:00:00 2001 From: laserpants Date: Thu, 14 Apr 2016 17:31:09 +0300 Subject: [PATCH 4/7] draw Avatar circle --- components/avatar.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/components/avatar.cpp b/components/avatar.cpp index 16fb09b..fba4873 100644 --- a/components/avatar.cpp +++ b/components/avatar.cpp @@ -25,7 +25,18 @@ void Avatar::paintEvent(QPaintEvent *event) { QPainter painter(this); - painter.drawRect(0, 50, 50, 50); + painter.drawRect(rect().adjusted(0, 0, -1, -1)); + + painter.setRenderHint(QPainter::Antialiasing); + + QBrush brush; + brush.setStyle(Qt::SolidPattern); + + painter.setPen(Qt::NoPen); + painter.setBrush(brush); + + QRect r = rect(); + painter.drawEllipse(r.center(), 24, 24); QWidget::paintEvent(event); } From 800f5d4d339262272af95e7baf5cfe54d5e2176f Mon Sep 17 00:00:00 2001 From: laserpants Date: Thu, 14 Apr 2016 17:33:33 +0300 Subject: [PATCH 5/7] set Avatar radius to 20 --- components/avatar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/avatar.cpp b/components/avatar.cpp index fba4873..495bcf4 100644 --- a/components/avatar.cpp +++ b/components/avatar.cpp @@ -36,7 +36,7 @@ void Avatar::paintEvent(QPaintEvent *event) painter.setBrush(brush); QRect r = rect(); - painter.drawEllipse(r.center(), 24, 24); + painter.drawEllipse(r.center(), 20, 20); QWidget::paintEvent(event); } From a6038ff9f2ad2bc026d7dbae9b6395059ae05ea0 Mon Sep 17 00:00:00 2001 From: laserpants Date: Thu, 14 Apr 2016 18:15:17 +0300 Subject: [PATCH 6/7] create animation on TextField --- components/textfield.cpp | 53 ++++++++++++++++++++++++++++++++++++++-- components/textfield.h | 16 ++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/components/textfield.cpp b/components/textfield.cpp index 49efe06..07e59e9 100644 --- a/components/textfield.cpp +++ b/components/textfield.cpp @@ -1,18 +1,55 @@ +#include #include #include +#include #include "textfield.h" #include "style.h" TextField::TextField(QWidget *parent) - : QLineEdit(parent) + : QLineEdit(parent), + _animation(new QPropertyAnimation(this)), + _progress(1) { setStyle(&Style::instance()); + + _animation->setPropertyName("progress"); + _animation->setTargetObject(this); + _animation->setEasingCurve(QEasingCurve::InCubic); + _animation->setDuration(350); + _animation->setStartValue(1); + _animation->setEndValue(0); } TextField::~TextField() { } +void TextField::setProgress(qreal progress) +{ + if (_progress == progress) + return; + _progress = progress; + + emit progressChanged(progress); + update(); +} + +void TextField::focusInEvent(QFocusEvent *event) +{ + _animation->setDirection(QAbstractAnimation::Forward); + _animation->start(); + + QLineEdit::focusInEvent(event); +} + +void TextField::focusOutEvent(QFocusEvent *event) +{ + _animation->setDirection(QAbstractAnimation::Backward); + _animation->start(); + + QLineEdit::focusOutEvent(event); +} + void TextField::mousePressEvent(QMouseEvent *event) { QLineEdit::mousePressEvent(event); @@ -28,5 +65,17 @@ void TextField::paintEvent(QPaintEvent *event) QLineEdit::paintEvent(event); QPainter painter(this); - painter.drawRect(0, 0, 50, 50); + + QBrush brush; + brush.setStyle(Qt::SolidPattern); + + if (!qFuzzyCompare(1, _progress)) { + + painter.setPen(Qt::NoPen); + painter.setBrush(brush); + + int w = _progress*static_cast(width()/2); + + painter.drawRect(w, height()-2, width()-w*2, 2); + } } diff --git a/components/textfield.h b/components/textfield.h index 3831f87..72a38f0 100644 --- a/components/textfield.h +++ b/components/textfield.h @@ -3,18 +3,34 @@ #include +class QPropertyAnimation; + class TextField : public QLineEdit { Q_OBJECT + Q_PROPERTY(qreal progress WRITE setProgress READ progress NOTIFY progressChanged) + public: explicit TextField(QWidget *parent = 0); ~TextField(); + void setProgress(qreal progress); + inline qreal progress() const { return _progress; } + +signals: + void progressChanged(qreal); + protected: + void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE; + void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + +private: + QPropertyAnimation *const _animation; + qreal _progress; }; #endif // TEXTFIELD_H From da03788d6cf2ba4f80662107472227014f853efe Mon Sep 17 00:00:00 2001 From: laserpants Date: Fri, 15 Apr 2016 11:21:28 +0300 Subject: [PATCH 7/7] decrease tab underline width --- components/tabs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/tabs.cpp b/components/tabs.cpp index a5073d8..c2be51e 100644 --- a/components/tabs.cpp +++ b/components/tabs.cpp @@ -75,11 +75,11 @@ void Tabs::updateInkBar() const QRect &r = item->geometry(); const qreal s = 1-_tween; if (QAbstractAnimation::Running != _animation->state()) { - _inkBarGeometry = QRect(r.left(), r.bottom()-3, r.width(), 4); + _inkBarGeometry = QRect(r.left(), r.bottom()-1, r.width(), 2); } else { const qreal left = _previousGeometry.left()*s + r.left()*_tween; const qreal width = _previousGeometry.width()*s + r.width()*_tween; - _inkBarGeometry = QRect(left, r.bottom()-3, width, 4); + _inkBarGeometry = QRect(left, r.bottom()-1, width, 2); } update(); }