QT c++ 自定义按钮类 加载图片 美化按钮
如果你有需要利用图片美化按钮的情况,本文能帮助你。
鼠标左键按下按钮和松开,按钮显示不同的图片。
1.按钮类
//因为此类比较简单,1个头文件搞定,没有cpp文件
#ifndef CUSTOMBUTTON_H
#define CUSTOMBUTTON_H
#include <QPushButton>
#include <QPainter>
#include <QMouseEvent>
#include <QPixmap>
class CustomButton : public QPushButton
{
Q_OBJECT
public:
CustomButton(QWidget *parent = nullptr) : QPushButton(parent) {}
bool pressed1;
protected:
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
QPixmap pixmap;
//if (isDown()) {//这个不起作用
if (pressed1==true)//自己定义了个按下的布尔变量
{
pixmap.load("d:/Pictures/button_forward_2.png"); // 按下时的图片路径,改成你自己的
qDebug()<<"press";
}
else
{
pixmap.load("d:/Pictures/button_forword_1.png"); // 释放时的图片路径
qDebug()<<"release";
}
painter.drawPixmap(rect(), pixmap);
}
void mousePressEvent(QMouseEvent *event) override
{ pressed1=true;
update(); // 按下时重绘按钮
//qDebug()<<"_press";
}
void mouseReleaseEvent(QMouseEvent *event) override
{ pressed1=false;
update(); // 释放时重绘按钮
//qDebug()<<"_release";
}
};
#endif // CUSTOMBUTTON_H
2.widget调用 CustomButton类
(1)头文件
#define WIDGET_H
#include <QWidget>
#include "CustomButton.h"
#include <QVBoxLayout>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void initUI();
private:
Ui::Widget *ui;
CustomButton *button;
};
#endif // WIDGET_H
(2)cpp文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
initUI();
}
Widget::~Widget()
{
delete ui;
}
void Widget::initUI()
{
QVBoxLayout * mainlayout = new QVBoxLayout(this);//指定布局属于啥组件
CustomButton *button=new CustomButton(this) ;
button->setFixedWidth(55);
button->setFixedHeight(30);
mainlayout->addWidget(button);//指定布局包含啥组件
this->setLayout(mainlayout);
}