Rename file imageswitch.h & imageswitch.cpp to ImageSwitch.h & ImageSwitch.cpp, and refactor.

This commit is contained in:
Krad
2022-06-07 15:17:12 +08:00
parent 9c5838eaf8
commit c37d1134a6
4 changed files with 82 additions and 152 deletions

View File

@@ -0,0 +1,54 @@
#include "ImageSwitch.h"
#include <qpainter.h>
#include <qdebug.h>
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();
}

View File

@@ -0,0 +1,28 @@
#ifndef IMAGESWITCH_H
#define IMAGESWITCH_H
#include <QWidget>
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

View File

@@ -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();
}
}

View File

@@ -1,61 +0,0 @@
#ifndef IMAGESWITCH_H
#define IMAGESWITCH_H
/**
* 图片开关控件 作者:feiyangqingyun(QQ:517216493) 2016-11-25
* 1. 自带三种开关按钮样式。
* 2. 可自定义开关图片。
*/
#include <QWidget>
#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