QPushbutton实现自定义背景图,同时使用样式表设置不同的背景色
1.新建一个ui文件,里面防止一个QPushbutton
2.头文件
#pragma once
#include <QWidget>
#include "ui_DeletePushButtonWidget.h"
#include <QLabel>
#include <QVBoxLayout>
class DeletePushButtonWidget : public QWidget
{
Q_OBJECT
public:
DeletePushButtonWidget(QWidget *parent = Q_NULLPTR);
~DeletePushButtonWidget();
private:
Ui::DeletePushButtonWidget ui;
public:
bool isButtonChecked();
void setCheckedState(bool isChecked);
public:
QLabel *m_label_img;
QVBoxLayout* m_VBoxLayout;
signals:
void sig_Clicked(bool isCheck = false);
private:
private slots:
void slt_pbtn_Clicked(bool isCheck);
};
3 源文件
#include "DeletePushButtonWidget.h"
#include <QPixmap>
#include <QBitmap>
DeletePushButtonWidget::DeletePushButtonWidget(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
ui.pushButton->setToolTip(QObject::tr("delete"));
ui.pushButton->setText("");
connect(ui.pushButton, &QPushButton::clicked, this, &DeletePushButtonWidget::slt_pbtn_Clicked);
ui.pushButton->setStyleSheet("QPushButton{border: 0px solid #B7B9BE; border-image: none; border-radius: 4px;}\
QPushButton:hover{border-image: none; background-color: rgba(146,229,215,30%);}\
QPushButton:checked{border-image: none; background-color: rgba(146,229,215,80%);}");
m_label_img = new QLabel(ui.pushButton);
m_label_img->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
QPixmap showImg(":/new/prefix1/Resources/delete.png");
showImg = showImg.scaled(26, 26, Qt::KeepAspectRatio, Qt::FastTransformation);
m_label_img->setPixmap(showImg);
m_label_img->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
m_VBoxLayout = new QVBoxLayout(ui.pushButton);
m_VBoxLayout->setContentsMargins(6, 6, 6, 6);
m_VBoxLayout->addWidget(m_label_img);
ui.pushButton->setLayout(m_VBoxLayout);
}
DeletePushButtonWidget::~DeletePushButtonWidget()
{
if (m_label_img != nullptr)
{
delete m_label_img;
m_label_img = nullptr;
}
if (m_VBoxLayout != nullptr)
{
delete m_VBoxLayout;
m_VBoxLayout = nullptr;
}
}
bool DeletePushButtonWidget::isButtonChecked()
{
return ui.pushButton->isChecked();
}
void DeletePushButtonWidget::setCheckedState(bool isChecked)
{
ui.pushButton->setChecked(isChecked);
}
void DeletePushButtonWidget::slt_pbtn_Clicked(bool isCheck)
{
emit sig_Clicked(isCheck);
}