Files
OfficeAssistant_Win10/OfficeAssistant_msvc/MyButton.cpp
2023-08-18 19:09:55 +08:00

98 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Created by HW on 2023/07/26.
//
#include "MyButton.h"
#include "config.h"
MyButton::MyButton(ButtonStruct &buttonStruct,int width,int height,QList<MyButton *> *buttons,QWidget *parent) : QPushButton(parent) {
this->buttons=buttons;
this->width2=width;
this->height2=height;
this->text=buttonStruct.text;
this->op = buttonStruct.op;
this->orig_name = buttonStruct.orig_name;
this->func = buttonStruct.func;
this->url = buttonStruct.url;
this->path = buttonStruct.path;
this->initial_position = buttonStruct.initial_position;
this->logo=buttonStruct.image;
this->logo_cover = buttonStruct.image_cover;
this->background_color = buttonStruct.background_color;
QString style = "background-color:";
style += buttonStruct.background_color;
style += ";border:none;";
this->setStyleSheet(style);
this->text_color = buttonStruct.text_color;
this->text_cover_color = buttonStruct.text_cover_color;
this->checked = false;
}
MyButton::~MyButton() {
}
void MyButton::paintEvent(QPaintEvent *e) {
QPushButton::paintEvent(e);
QRectF rect(0, 0, this->width(), this->height());
QColor qColor;
qColor.setNamedColor(background_color);
QPainter painter(this);
painter.fillRect(rect, qColor);
painter.setRenderHint(QPainter::Antialiasing);
int logo_width=width()/3;
int logo_x=width()/3;
int logo_y=(height()-logo_width)/3;
setContentsMargins(0,0,0,0);
QFont ft;
ft.setPixelSize(TEXT_SIZE);
//别问我为啥乘3我也不知道
int text_x=(width()-TEXT_SIZE*text.length()*scale*3)/2;
int text_y=(logo_width+logo_y+10);
QRectF logo_rect(logo_x, logo_y, logo_width, logo_width);
QRectF text_rect(text_x,text_y, TEXT_SIZE*text.length()*scale*3,TEXT_SIZE*scale*3);
if(checked){
painter.setPen(text_cover_color);
painter.drawImage(logo_rect, *logo_cover);
painter.drawText(text_rect, Qt::AlignCenter, text);
}
else {
painter.setPen(text_color);
painter.drawImage(logo_rect, *logo);
painter.drawText(text_rect, Qt::AlignCenter, text);
}
}
QSize MyButton::sizeHint() const {
return QSize(width2,height2);
}
void MyButton::enterEvent(QEvent *event) {
QWidget::enterEvent(event);
checked = true;
update();
}
void MyButton::leaveEvent(QEvent *event) {
QWidget::leaveEvent(event);
checked = false;
update();
}
void MyButton::mousePressEvent(QMouseEvent *event) {
QPushButton::mousePressEvent(event);
}
void MyButton::mouseReleaseEvent(QMouseEvent *event) {
QPushButton::mouseReleaseEvent(event);
for(auto button:*buttons){
button->setChecked(false);
button->update();
}
if(checked)
checked=false;
else
checked=true;
emit clicked1(orig_name,op, func, url, path, initial_position);
}