先创建一个MyButton类,必须继承自QWidget(因为QWidget里面包含可以继承的事件!)
mybutton.h
#ifndef MYBUTTON_H
#define MYBUTTON_H#include <QWheelEvent>
#include <QWidget>class MyButton : public QWidget
{Q_OBJECT
public:explicit MyButton(QWidget *parent = nullptr);signals:void clicked();//自定义信号,随便命名
private:QPixmap pic;
protected:void mousePressEvent(QMouseEvent *event) override;void leaveEvent(QEvent *event) override;void enterEvent(QEvent *event) override;void paintEvent(QPaintEvent *event) override;};#endif // MYBUTTON_H
mybutton.cpp
#include "mybutton.h"#include <QPainter>MyButton::MyButton(QWidget *parent) : QWidget(parent)
{pic.load(":/new/prefix1/image/1.png");setFixedSize(pic.size());//设置和图片一样大update();
}void MyButton::mousePressEvent(QMouseEvent *event)
{pic.load(":/new/prefix1/image/3.png");emit clicked();//发射信号update();
}void MyButton::leaveEvent(QEvent *event)
{pic.load(":/new/prefix1/image/1.png");update();
}void MyButton::enterEvent(QEvent *event)
{pic.load(":/new/prefix1/image/2.png");update();
}void MyButton::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.drawPixmap(rect(),pic);//在控件上面画图
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "mybutton.h"
#include <QDebug>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->mybtn,&MyButton::clicked,[=](){qDebug()<<"控件被点击了";//当点击控件时会输出});
}Widget::~Widget()
{delete ui;
}