QT c++ 自定义按钮类 加载图片 美化按钮

发布于:2025-02-11 ⋅ 阅读:(33) ⋅ 点赞:(0)

如果你有需要利用图片美化按钮的情况,本文能帮助你。

鼠标左键按下按钮和松开,按钮显示不同的图片。

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);
}
 


网站公告

今日签到

点亮在社区的每一天
去签到