当前位置: 首页 > article >正文

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


http://www.kler.cn/a/471288.html

相关文章:

  • vscode通过ssh连接服务器实现免密登录
  • Blazor用户身份验证状态详解
  • 服务器漏洞修复解决方案
  • BloombergGPT: A Large Language Model for Finance——面向金融领域的大语言模型
  • Python3 正则表达式
  • Spring Boot 项目自定义加解密实现配置文件的加密
  • LeetCode 3019.按键变更的次数:遍历(转小写)
  • selenium找不到元素解决方案-切换iframe
  • Bash语言的文件操作
  • HTML5-标签
  • Swin-Transformer
  • Web渗透测试之XSS跨站脚本攻击分类 详解
  • Effective C++读书笔记——item11(自赋值)
  • Python中判断语句及循环语句练习
  • 对于安装完服务后,无法执行命令的问题处理
  • 行为树详解(6)——黑板模式
  • halcon三维点云数据处理(五)创建代表工具和机器人底座的3D模型
  • Qt仿音乐播放器:客户端唯一化
  • 使用 httputils + chronicle-bytes 实现金融级 java rpc
  • 【免费】2004-2019年各省规模以上工业企业RD经费面板数据
  • RabbitMQ-死信队列
  • android系统的一键编译与非一键编译 拆包 刷机方法
  • 【数据可视化】数据可视化看板需求梳理模板(含示例)
  • Linux 系统清理命令大全
  • 深度学习中的正则化方法
  • React 深入学习理解