自定义按钮控件

文章介绍了如何使用C++和Qt创建一个可自定义样式的DIYbutton控件,包括设置文本、图标和下拉框值的功能,并在主类中连接按钮事件以动态改变控件属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图如上,点击按钮切换背景图,中心图标文字以及编号都可以外部自主定义。

控件样式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()
{}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值