效果图如上,点击按钮切换背景图,中心图标文字以及编号都可以外部自主定义。
控件样式ui
自定义按钮控件DIYbutton.h
#pragma once
#include <QPushbutton>
#include "ui_DIYbutton.h"
#include <QPixmap>
#include <QPalette>
#include <QBrush>
class DIYbutton : public QPushButton
{
Q_OBJECT
public:
DIYbutton(QWidget *parent = nullptr);
~DIYbutton();
void setTitlename(QString name);
void setButtonicon(QString str);
void setComboboxValue(QString value);
private:
Ui::DIYbuttonClass ui;
};
自定义按钮控件DIYbutton.cpp
#include "DIYbutton.h"
#include <QCoreApplication>
#include <qdebug.h>
#include <qimage.h>
#include <QIcon>
int i = 1;
DIYbutton::DIYbutton(QWidget *parent)
: QPushButton(parent)
{
ui.setupUi(this);
ui.pushButton->setCheckable(true);
QString path = QCoreApplication::applicationDirPath();
qDebug() << path;
//不显示背景图弃用
/*QPixmap pixmap = QPixmap(":/x64/Debug/images/d.png").scaled(this->size());
QPalette palette(this->palette());
palette.setBrush(QPalette::Background, QBrush(pixmap));
this->setPalette(palette);*/
QIcon icon;
icon.addFile(":/x64/Debug/images/d.png");
ui.pushButton->setIcon(icon);
ui.pushButton->setIconSize(QSize(331, 211));
//点击切换按钮背景图
connect(ui.pushButton, &QPushButton::clicked, this, [=]() {
if (i % 2 == 0)
{
//不显示背景图弃用
/*QPixmap pixmap = QPixmap(":/x64/Debug/images/d.png").scaled(this->size());
QPalette palette(this->palette());
palette.setBrush(QPalette::Background, QBrush(pixmap));
this->setPalette(palette);*/
QIcon icon;
icon.addFile(":/x64/Debug/images/d.png");
ui.pushButton->setIcon(icon);
ui.pushButton->setIconSize(QSize(331, 211));
qDebug() << "1111111111";
}
else
{
//不显示背景图弃用
/*QPixmap pixmap = QPixmap( ":/x64/Debug/images/e.png").scaled(this->size());
QPalette palette(this->palette());
palette.setBrush(QPalette::Background, QBrush(pixmap));
this->setPalette(palette)*/;
QIcon icon;
icon.addFile(":/x64/Debug/images/e.png");
ui.pushButton->setIcon(icon);
ui.pushButton->setIconSize(QSize(331, 211));
qDebug() << "2222222222";
}i++;
}
);
}
DIYbutton::~DIYbutton()
{}
void DIYbutton::setTitlename(QString name)
{
ui.label_word->setText(name);
ui.label_word->setAlignment(Qt::AlignCenter);
}
void DIYbutton::setButtonicon(QString str)
{
QPixmap* pix = new QPixmap(str);
QSize sz = ui.label_icon->size();
ui.label_icon->setPixmap(pix->scaled(sz));
}
void DIYbutton::setComboboxValue(QString value)
{
ui.comboBox->addItem(value);
}
主类.h没写任何东西
主类DIY.cpp
#include "DIY.h"
DIY::DIY(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
DIYbutton *diy = new DIYbutton(this);
diy->show();
connect(ui.pushButton, &QPushButton::clicked, this, [=]() {
diy->setButtonicon(ui.lineEdit->text());
});
connect(ui.pushButton_2, &QPushButton::clicked, this, [=]() {
diy->setTitlename(ui.lineEdit_2->text());
});
connect(ui.pushButton_3, &QPushButton::clicked, this, [=]() {
diy->setComboboxValue(ui.lineEdit_3->text());
});
}
DIY::~DIY()
{}