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

}

相关推荐
爱吃涮毛肚的肥肥(暂时吃不了版)5 小时前
仿腾讯会议——音频服务器部分
c++·qt·面试·职场和发展·音视频·腾讯会议
旭唐6 小时前
Qt Widgets模块功能详细说明,基本控件:QCheckBox(三)
qt·qbuttongroup·qt widgets·qcheckbox·qradionbutton
Forest_HAHA9 小时前
QT——概述
开发语言·qt
@Turbo@10 小时前
【QT】一个界面中嵌入其它界面(二)
开发语言·数据库·qt
破晓的历程14 小时前
Qt之QMessageBox
服务器·开发语言·qt
EverestVIP14 小时前
Qt中控件的Viewport作用
开发语言·qt
潇-xiao14 小时前
Qt 信号和槽-核心知识点小结(11)
c++·笔记·qt
@Turbo@14 小时前
【QT】一个界面中嵌入其它界面(三)
开发语言·qt·命令模式
干货日记14 小时前
Qt与OpenGL绘制大全(加载obj模型文件、点、线、面、立方体、圆等)
开发语言·qt·命令模式
@Turbo@14 小时前
【QT】类A和类B共用类C
c语言·网络·qt