// TQZButton.h
#ifndef TQZBUTTON_H
#define TQZBUTTON_H
#include <QPushButton>
enum TQZButtonType {
    COMMON,
    CLOSE
};
class TQZButton : public QPushButton
{
    Q_OBJECT
public:
    explicit TQZButton(const QString &text, TQZButtonType buttonType , QWidget *parent = nullptr);
    virtual ~TQZButton();
protected:
    void enterEvent(QEvent* event);
    void leaveEvent(QEvent* event);
private:
    void UpdateSelf(const QString &text);
    QMap<TQZButtonType, QMap<QString, QString> *>* GetButtonStyleConfig();
private:
    QMap<TQZButtonType, QMap<QString, QString> *>* m_buttonStyleConfig;
    TQZButtonType m_buttonType;
signals:
};
#endif // TQZBUTTON_H
// TQZButton.cpp
#include "TQZButton.h"
#include <QFont>
#include <QMouseEvent>
#include <QDebug>
TQZButton::TQZButton(const QString &text, TQZButtonType buttonType, QWidget *parent):
    QPushButton(parent),
    m_buttonStyleConfig(nullptr),
    m_buttonType(buttonType)
{
    this->UpdateSelf(text);
}
void TQZButton::UpdateSelf(const QString &text) {
    this->setText(text);
    this->setStyleSheet(GetButtonStyleConfig()->find(m_buttonType).value()->find("common").value());
}
void TQZButton::enterEvent(QEvent* event) {
    this->setStyleSheet(GetButtonStyleConfig()->find(m_buttonType).value()->find("movein").value());
    QPushButton::enterEvent(event);
}
void TQZButton::leaveEvent(QEvent* event) {
    this->setStyleSheet(GetButtonStyleConfig()->find(m_buttonType).value()->find("common").value());
    QPushButton::enterEvent(event);
}
QMap<TQZButtonType, QMap<QString, QString>*>* TQZButton::GetButtonStyleConfig() {
    if (this->m_buttonStyleConfig == nullptr) {
        this->m_buttonStyleConfig = new QMap<TQZButtonType, QMap<QString, QString>*>;
        QMap<QString, QString> *commonButtonConfig = new QMap<QString, QString>;
        commonButtonConfig->insert("common", "TQZButton { border: none; color: white; }");
        commonButtonConfig->insert("movein", "TQZButton { border-radius: 6px; border: none; background-color: rgb(63, 60, 60); color: white; }");
        QMap<QString, QString> *closeButtonConfig = new QMap<QString, QString>;
        closeButtonConfig->insert("common", "TQZButton { border: none; color: white; }");
        closeButtonConfig->insert("movein", "TQZButton { border-radius: 6px; border: none; background-color: rgb(228, 64, 50); color: white; }");
        this->m_buttonStyleConfig->insert(COMMON, commonButtonConfig);
        this->m_buttonStyleConfig->insert(CLOSE, closeButtonConfig);
    }
    return this->m_buttonStyleConfig;
}
TQZButton::~TQZButton() {
    if (this->m_buttonStyleConfig != nullptr) {
        foreach (const TQZButtonType &key, this->m_buttonStyleConfig->keys()) {
            delete this->m_buttonStyleConfig->value(key);
            this->m_buttonStyleConfig->insert(key, nullptr);
        }
        delete this->m_buttonStyleConfig;
        this->m_buttonStyleConfig = nullptr;
    }
}