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

}

相关推荐
小小码农Come on20 分钟前
Qt Creator常用设置
qt
wkm9562 小时前
在arm64 ubuntu系统安装Qt后编译时找不到Qt3DExtras头文件
开发语言·arm开发·qt
小小码农Come on4 小时前
QT开发环境安装
开发语言·qt
小小码农Come on4 小时前
QT内存管理
开发语言·qt
有理想的打工人5 小时前
QT的安装
qt
SilentSlot6 小时前
【QT-QML】8. 输入元素
qt·qml
是店小二呀6 小时前
Visual Studio C++ 工程架构深度解析:从 .vcxproj 到 Qt MOC 的文件管理实录
c++·qt·visual studio
枫叶丹46 小时前
【Qt开发】Qt系统(十二)-> Qt视频
c语言·开发语言·c++·qt·音视频
浅碎时光8077 小时前
Qt (信号与槽 Widget控件 qrc文件)
开发语言·qt
郝学胜-神的一滴7 小时前
跨平台通信的艺术与哲学:Qt与Linux Socket的深度对话
linux·服务器·开发语言·网络·c++·qt·软件构建