From 6d049c0a56a07a5430455c24b39466a3ee828014 Mon Sep 17 00:00:00 2001 From: tianduanrui <2407223896@qq.com> Date: Fri, 17 Nov 2017 00:01:26 +0800 Subject: [PATCH] add qqtsvgcheckbox --- src/qqt_source.pri | 6 ++++-- src/svgwidgets/qqtsvgcheckbox.cpp | 24 ++++++++++++++++++++++++ src/svgwidgets/qqtsvgcheckbox.h | 11 +++++++++++ src/svgwidgets/qqtsvgpushbutton.cpp | 4 ++-- src/widgets/qqtcheckbox.cpp | 8 +++++++- src/widgets/qqtcheckbox.h | 12 +++++++++--- src/widgets/qqtpushbutton.h | 14 +++++++------- 7 files changed, 64 insertions(+), 15 deletions(-) diff --git a/src/qqt_source.pri b/src/qqt_source.pri index 7312d3a2..0b499d20 100644 --- a/src/qqt_source.pri +++ b/src/qqt_source.pri @@ -14,10 +14,12 @@ #------------------------------------------------- SOURCES += \ $$PWD/svgwidgets/qqtsvgwidget.cpp \ - $$PWD/svgwidgets/qqtsvgpushbutton.cpp + $$PWD/svgwidgets/qqtsvgpushbutton.cpp \ + $$PWD/svgwidgets/qqtsvgcheckbox.cpp HEADERS += \ $$PWD/svgwidgets/qqtsvgwidget.h \ - $$PWD/svgwidgets/qqtsvgpushbutton.h + $$PWD/svgwidgets/qqtsvgpushbutton.h \ + $$PWD/svgwidgets/qqtsvgcheckbox.h #root dir HEADERS += $$PWD/qqt.h \ diff --git a/src/svgwidgets/qqtsvgcheckbox.cpp b/src/svgwidgets/qqtsvgcheckbox.cpp index 6c259c69..3ab2051e 100644 --- a/src/svgwidgets/qqtsvgcheckbox.cpp +++ b/src/svgwidgets/qqtsvgcheckbox.cpp @@ -4,3 +4,27 @@ QQtSvgCheckBox::QQtSvgCheckBox(QWidget* parent) : QQtCheckBox(parent) { } + +void QQtSvgCheckBox::renderToVariable() +{ + TBtnIconTable& pic = iconTable(); + + for (int i = 0; i < BTN_MAX; i++) + r[i].load(pic[i]); +} + + +void QQtSvgCheckBox::paintEvent(QPaintEvent* event) +{ + Q_UNUSED(event) + + QStylePainter p(this); + int bs = isChecked() ? BTN_PRESS : BTN_NORMAL; + if (r[bs].isValid()) + r[bs].render(&p); + + bool enabled = isEnabled(); + QStyleOptionButton opt; + initStyleOption(&opt); + p.drawItemText(rect(), Qt::AlignBottom, opt.palette, enabled, text()); +} diff --git a/src/svgwidgets/qqtsvgcheckbox.h b/src/svgwidgets/qqtsvgcheckbox.h index f470b131..e451230f 100644 --- a/src/svgwidgets/qqtsvgcheckbox.h +++ b/src/svgwidgets/qqtsvgcheckbox.h @@ -9,9 +9,20 @@ class QQtSvgCheckBox : public QQtCheckBox public: explicit QQtSvgCheckBox(QWidget* parent = nullptr); + /** + * @brief renderToVariable + * call this function after iconTable() set. + */ + void renderToVariable(); signals: public slots: + + // QWidget interface +protected: + virtual void paintEvent(QPaintEvent* event) override; +private: + QSvgRenderer r[BTN_MAX]; }; #endif // QQTSVGCHECKBOX_H diff --git a/src/svgwidgets/qqtsvgpushbutton.cpp b/src/svgwidgets/qqtsvgpushbutton.cpp index a5c538c1..5cedb8e1 100644 --- a/src/svgwidgets/qqtsvgpushbutton.cpp +++ b/src/svgwidgets/qqtsvgpushbutton.cpp @@ -1,5 +1,4 @@ #include "qqtsvgpushbutton.h" -#include QQtSvgPushButton::QQtSvgPushButton(QWidget* parent) : QQtPushButton(parent) { @@ -22,7 +21,8 @@ void QQtSvgPushButton::paintEvent(QPaintEvent* event) QStylePainter p(this); EBtnStatus bs = btnStatus(); - r[bs].render(&p); + if (r[bs].isValid()) + r[bs].render(&p); bool enabled = isEnabled(); QStyleOptionButton opt; diff --git a/src/widgets/qqtcheckbox.cpp b/src/widgets/qqtcheckbox.cpp index 95db01f1..a464d60a 100644 --- a/src/widgets/qqtcheckbox.cpp +++ b/src/widgets/qqtcheckbox.cpp @@ -11,12 +11,18 @@ QQtCheckBox::~QQtCheckBox() { } -void QQtCheckBox::pixMap(QImage& icon, QImage& iconSel) +void QQtCheckBox::pixMap(QImage& icon, QImage& iconSel) const { icon = QImage(this->m_icon[BTN_NORMAL]); iconSel = QImage(this->m_icon[BTN_PRESS]); } +void QQtCheckBox::pixMap(QString& icon, QString& iconSel) const +{ + icon = m_icon[BTN_NORMAL]; + iconSel = m_icon[BTN_PRESS]; +} + void QQtCheckBox::setPixmap(const QString& icon, const QString& iconSel) { this->m_icon[BTN_NORMAL] = icon; diff --git a/src/widgets/qqtcheckbox.h b/src/widgets/qqtcheckbox.h index 9d4b4409..289eef07 100644 --- a/src/widgets/qqtcheckbox.h +++ b/src/widgets/qqtcheckbox.h @@ -5,6 +5,8 @@ #include "qqtcore.h" #include "qqtwidgets.h" #include "qqt-local.h" +#include +#include /** * @brief The QQtCheckBox class @@ -17,15 +19,19 @@ class QQTSHARED_EXPORT QQtCheckBox : public QCheckBox public: explicit QQtCheckBox(QWidget* parent = 0); virtual ~QQtCheckBox(); - void pixMap(QImage& m_icon, QImage& m_iconSel); - void setPixmap(const QString& m_icon = QString(), const QString& m_iconSel = QString()); + + inline TBtnIconTable& iconTable() { return m_icon; } + void pixMap(QImage& icon, QImage& iconSel) const; + void pixMap(QString& icon, QString& iconSel) const; + void setPixmap(const QString& icon = QString(), + const QString& iconSel = QString()); private: TBtnIconTable m_icon; // QWidget interface protected: - void paintEvent(QPaintEvent*); + virtual void paintEvent(QPaintEvent*) override; // QAbstractButton interface protected: diff --git a/src/widgets/qqtpushbutton.h b/src/widgets/qqtpushbutton.h index a50de9b4..67d84775 100644 --- a/src/widgets/qqtpushbutton.h +++ b/src/widgets/qqtpushbutton.h @@ -12,7 +12,7 @@ class QQTSHARED_EXPORT QQtPushButton : public QPushButton public: explicit QQtPushButton(QWidget* parent = 0); - ~QQtPushButton(); + virtual ~QQtPushButton(); /* * QQtPushButton [] = 不能正常运算 所以采用这种形式。 @@ -27,15 +27,15 @@ private: // QWidget interface protected: - void paintEvent(QPaintEvent*); + virtual void paintEvent(QPaintEvent*) override; // QWidget interface protected: - void mousePressEvent(QMouseEvent*); - void mouseReleaseEvent(QMouseEvent*); - void enterEvent(QEvent*); - void leaveEvent(QEvent*); - void changeEvent(QEvent* e); + virtual void mousePressEvent(QMouseEvent*) override; + virtual void mouseReleaseEvent(QMouseEvent*) override; + virtual void enterEvent(QEvent*) override; + virtual void leaveEvent(QEvent*) override; + virtual void changeEvent(QEvent* e) override; // QWidget interface protected: