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

voidinitUI();

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

}

相关推荐
韭菜钟3 小时前
在Qt中用cmake实现类似pri文件的功能
开发语言·qt·系统架构
韭菜钟8 小时前
Qt从qmake迁移到cmake的记录
开发语言·qt
永不停转16 小时前
详谈 QLayout::SizeConstraint 和 QSizePolicy 对 QWidget 尺寸的影响
c++·qt
王廷胡_白嫖帝20 小时前
Qt网络速度测试工具开发教程 - 从零开始构建网络测速应用
开发语言·网络·qt
qq_25929724731 天前
QT-窗口类部件
c++·qt
楚Y6同学2 天前
QT之QSS的使用方法和常用控件的样式设置
开发语言·qt
Zafir20242 天前
Qt实现TabWidget通过addTab函数添加的页,页内控件自适应窗口大小
开发语言·c++·qt·ui
王廷胡_白嫖帝2 天前
Qt文件压缩工具项目开发教程
java·开发语言·qt
牵牛老人3 天前
Qt 插件开发全解析:从接口定义,插件封装,插件调用到插件间的通信
开发语言·qt
机器视觉知识推荐、就业指导3 天前
面试问题详解五:Qt 信号与槽的动态管理
开发语言·qt