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

}

相关推荐
美丽的欣情6 分钟前
Qt实现海康OSD拖动Demo
开发语言·qt
qincjun2 小时前
Qt仿音乐播放器:数据库持久化
开发语言·数据库·qt
-凌凌漆-7 小时前
【Qt】C++11 Lambda表达式
qt
清醒的兰8 小时前
Qt 样式表
开发语言·qt
我想学LINUX9 小时前
【STM32+QT项目】基于STM32与QT的智慧粮仓环境监测与管理系统设计(完整工程资料源码)
stm32·嵌入式硬件·qt·毕业设计·课程设计·项目开发
咬光空气10 小时前
Qt 5.14.2 学习记录 —— 오 信号与槽机制(2)
开发语言·qt·学习
鲁班相信爱情13 小时前
Qt: 无法运行rc.exe
c++·qt
吃不饱的得可可13 小时前
【Qt】对话框
开发语言·qt
咬光空气13 小时前
Qt 5.14.2 学习记录 —— 팔 QWidget 常用控件(3)
开发语言·qt·学习