// // Created by HW on 2023/07/26. // #include "MyButton.h" #include "config.h" MyButton::MyButton(ButtonStruct &buttonStruct,int width,int height,QList *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); }