diff --git a/src/components/ImageSwitch.cpp b/src/components/ImageSwitch.cpp new file mode 100644 index 0000000..b69f63c --- /dev/null +++ b/src/components/ImageSwitch.cpp @@ -0,0 +1,54 @@ +#include "ImageSwitch.h" + +#include +#include + + +namespace{ + const int DEFAULT_WIDTH = 100; + const int DEFAULT_HEIGHT = 50; + const char * const OFF_FILE_PATH = ":/icons/imageswitch/btncheckoff1.png"; + const char * const ON_FILE_PATH = ":/icons/imageswitch/btncheckon1.png"; +} + +ImageSwitch::ImageSwitch(QWidget* parent) +: QWidget(parent) +, mIsChecked(false) +, mImgOffFile(OFF_FILE_PATH) +, mImgOnFile(ON_FILE_PATH) +{ + this->resize(DEFAULT_WIDTH, DEFAULT_HEIGHT); + this->setMinimumSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); +} + +void ImageSwitch::mousePressEvent(QMouseEvent*) +{ + mIsChecked = !mIsChecked; + this->update(); + emit clicked(); +} + +void ImageSwitch::paintEvent(QPaintEvent*) +{ + QPainter painter(this); + painter.setRenderHints(QPainter::SmoothPixmapTransform); + QImage img(mIsChecked ? mImgOffFile : mImgOnFile); + img = img.scaled(this->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); + //按照比例自动居中绘制 + int pixX = rect().center().x() - img.width() / 2; + int pixY = rect().center().y() - img.height() / 2; + QPoint point(pixX, pixY); + painter.drawImage(point, img); +} + +bool ImageSwitch::getChecked() const +{ + return mIsChecked; +} + + +void ImageSwitch::setChecked(bool value) { + if (this->mIsChecked == value) return; + this->mIsChecked = value; + this->update(); +} diff --git a/src/components/ImageSwitch.h b/src/components/ImageSwitch.h new file mode 100644 index 0000000..c392252 --- /dev/null +++ b/src/components/ImageSwitch.h @@ -0,0 +1,28 @@ +#ifndef IMAGESWITCH_H +#define IMAGESWITCH_H + +#include + +class ImageSwitch : public QWidget +{ + Q_OBJECT +public: + explicit ImageSwitch(QWidget *parent = nullptr); + ~ImageSwitch() override = default; +protected: + void mousePressEvent(QMouseEvent *) override; + void paintEvent(QPaintEvent *event) override; +private: + bool mIsChecked; + QString mImgOffFile; + QString mImgOnFile; + +public: + bool getChecked() const; +signals: + void clicked(); +public Q_SLOTS: + void setChecked(bool isChecked); +}; + +#endif // IMAGESWITCH_H diff --git a/src/components/imageswitch.cpp b/src/components/imageswitch.cpp deleted file mode 100644 index 78cb676..0000000 --- a/src/components/imageswitch.cpp +++ /dev/null @@ -1,91 +0,0 @@ -#pragma execution_character_set("utf-8") - -#include "imageswitch.h" -#include "qpainter.h" -#include "qdebug.h" - -ImageSwitch::ImageSwitch(QWidget* parent) : QWidget(parent) -{ - isChecked = false; - setButtonStyle(ButtonStyle_1); - this->setFixedSize(sizeHint()); -} - -void ImageSwitch::mousePressEvent(QMouseEvent*) -{ - imgFile = isChecked ? imgOffFile : imgOnFile; - isChecked = !isChecked; - this->update(); - emit clicked(); -} - -void ImageSwitch::paintEvent(QPaintEvent*) -{ - QPainter painter(this); - painter.setRenderHints(QPainter::SmoothPixmapTransform); - QImage img(imgFile); - img = img.scaled(this->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); - - //按照比例自动居中绘制 - int pixX = rect().center().x() - img.width() / 2; - int pixY = rect().center().y() - img.height() / 2; - QPoint point(pixX, pixY); - painter.drawImage(point, img); -} - -bool ImageSwitch::getChecked() const -{ - return isChecked; -} - -ImageSwitch::ButtonStyle ImageSwitch::getButtonStyle() const -{ - return this->buttonStyle; -} - -QSize ImageSwitch::sizeHint() const -{ - return {100, 50}; -} - -QSize ImageSwitch::minimumSizeHint() const -{ - return sizeHint(); -} - -void ImageSwitch::setChecked(bool value) -{ - if (this->isChecked != value) { - this->isChecked = value; - imgFile = isChecked ? imgOnFile : imgOffFile; - this->update(); - } -} - -void ImageSwitch::setButtonStyle(const ImageSwitch::ButtonStyle& style) -{ - if (this->buttonStyle != style) { - this->buttonStyle = style; - - if (buttonStyle == ButtonStyle_1) { - imgOffFile = ":/icons/imageswitch/btncheckoff1.png"; - imgOnFile = ":/icons/imageswitch/btncheckon1.png"; - this->resize(sizeHint()); - } - else if (buttonStyle == ButtonStyle_2) { - imgOffFile = ":/icons/imageswitch/btncheckoff2.png"; - imgOnFile = ":/icons/imageswitch/btncheckon2.png"; - this->resize(sizeHint()); - } - else if (buttonStyle == ButtonStyle_3) { - imgOffFile = ":/icons/imageswitch/btncheckoff3.png"; - imgOnFile = ":/icons/imageswitch/btncheckon3.png"; - this->resize(sizeHint()); - } - - imgFile = isChecked ? imgOnFile : imgOffFile; - setChecked(isChecked); - this->update(); - updateGeometry(); - } -} diff --git a/src/components/imageswitch.h b/src/components/imageswitch.h deleted file mode 100644 index 4db820b..0000000 --- a/src/components/imageswitch.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef IMAGESWITCH_H -#define IMAGESWITCH_H - -/** - * 图片开关控件 作者:feiyangqingyun(QQ:517216493) 2016-11-25 - * 1. 自带三种开关按钮样式。 - * 2. 可自定义开关图片。 - */ - -#include - -#ifdef quc -class Q_DECL_EXPORT ImageSwitch : public QWidget -#else -class ImageSwitch : public QWidget -#endif - -{ - Q_OBJECT - Q_ENUMS(ButtonStyle) - - Q_PROPERTY(bool isChecked READ getChecked WRITE setChecked) - Q_PROPERTY(ButtonStyle buttonStyle READ getButtonStyle WRITE setButtonStyle) - -public: - enum ButtonStyle { - ButtonStyle_1 = 0, //开关样式1 - ButtonStyle_2 = 1, //开关样式2 - ButtonStyle_3 = 2, //开关样式3 - None = 3 //开关样式3 - }; - - explicit ImageSwitch(QWidget *parent = 0); - -protected: - void mousePressEvent(QMouseEvent *); - void paintEvent(QPaintEvent *event); - -private: - bool isChecked; - ButtonStyle buttonStyle = None; - - QString imgOffFile; - QString imgOnFile; - QString imgFile; - -public: - bool getChecked() const; - ButtonStyle getButtonStyle() const; - QSize sizeHint() const; - QSize minimumSizeHint() const; -signals: - void clicked(); -public Q_SLOTS: - //设置是否选中 - void setChecked(bool isChecked); - //设置按钮样式 - void setButtonStyle(const ImageSwitch::ButtonStyle &buttonStyle); -}; - -#endif // IMAGESWITCH_H