Qt QPushButton 按钮添加数字气泡

使用场景

项目中,在某个按钮的右上角添加数字气泡是一个很常见的功能,可以用新建一个组合类来实现。不过这样比较麻烦,如果加气泡是后面的需求,可能改动的地方较多。

下面介绍2种比较简单,不需要改动按钮响应的方式。

实现效果图

方案1

方案2

实现 

方案1:直接在按钮内部贴一个 QLabel

这种情况按钮不能太小,按钮的图片不能占整个按钮最好不要太满。不然效果不理想。

#pragma once

#include <QtWidgets/QWidget>
#include "ui_pafeyDemo.h"
#include <QLabel>

class pafeyDemo : public QWidget
{
	Q_OBJECT

public:
	pafeyDemo(QWidget *parent = Q_NULLPTR);

private:
	Ui::pafeyDemoClass ui;

	QLabel *m_pLabelToolRed;
};
#include "pafeyDemo.h"

pafeyDemo::pafeyDemo(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	m_pLabelToolRed = 0;

	connect(ui.pushButtonShow,&QPushButton::clicked,this, [=](){
		if (0 == m_pLabelToolRed)
		{
			m_pLabelToolRed = new QLabel(ui.btTool);
			m_pLabelToolRed->setObjectName("btToolNew"); // 设置子控件的对象名
			m_pLabelToolRed->setFixedSize(16, 16); // 设置小圆点大小 
			//m_pLabelToolRed->setStyleSheet("background-color: rgba(255, 255, 255, 0);border-image: url(:/pafeyDemo/Resources/bar/bar_new.png);"); // 设置小圆点样式 
			m_pLabelToolRed->setStyleSheet("QLabel{background-color: rgb(255, 85, 0);color: rgb(255, 255, 255);border-radius:8px}"); // 设置小圆点样式 
			m_pLabelToolRed->move(ui.btTool->width() - 16, 0); // 将小圆点移动到右上角 
			m_pLabelToolRed->setText("96");
			m_pLabelToolRed->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
		}
		m_pLabelToolRed->show();
	});
	connect(ui.pushButtonHide, &QPushButton::clicked, this, [=]() {
		m_pLabelToolRed->hide();
	});
	connect(ui.pushButtonNum, &QPushButton::clicked, this, [=]() {
		int num = m_pLabelToolRed->text().toInt()+1;
		if (num>99)
		{
			m_pLabelToolRed->setFixedSize(22, 16); // 设置小圆点大小 
			m_pLabelToolRed->move(ui.btTool->width() - 22, 0); // 将小圆点移动到右上角 
			m_pLabelToolRed->setText(QString("99+"));
		}
		else
		{
			m_pLabelToolRed->setText(QString::number(num));
		}
	});
	
}

要注意的是,红色气泡 QLabel 的长宽动态决定了 border-radius: 8px 的值,radius是长宽一半。

如果气泡的数字超过99,需要显示 99+ 的时候,可以加大 QLabel 的宽度。

我这个按钮比较小,99+的时候就挡住按钮本身比较多了。

效果不理想,那就可以用另一方案了。 

方案2:把按钮放在一个 QWidget 里面,再把气泡 QLabel 放在Qwidget 上。
#include "pafeyDemo.h"

pafeyDemo::pafeyDemo(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	m_pLabelToolRed = 0;

	ui.widgetBubble->setFixedSize(50,50);

	connect(ui.pushButtonShow,&QPushButton::clicked,this, [=](){
		if (0 == m_pLabelToolRed)
		{
			//m_pLabelToolRed = new QLabel(ui.btTool);
			m_pLabelToolRed = new QLabel(ui.widgetBubble);
			m_pLabelToolRed->setObjectName("btToolNew"); // 设置子控件的对象名
			m_pLabelToolRed->setFixedSize(16, 16); // 设置小圆点大小 
			//m_pLabelToolRed->setStyleSheet("background-color: rgba(255, 255, 255, 0);border-image: url(:/pafeyDemo/Resources/bar/bar_new.png);"); // 设置小圆点样式 
			m_pLabelToolRed->setStyleSheet("QLabel{background-color: rgb(255, 85, 0);color: rgb(255, 255, 255);border-radius:8px}"); // 设置小圆点样式 
			//m_pLabelToolRed->move(ui.btTool->width() - 16, 0); // 将小圆点移动到右上角 
			m_pLabelToolRed->move(ui.widgetBubble->width() - 16, 0); // 将小圆点移动到右上角 
			m_pLabelToolRed->setText("96");
			m_pLabelToolRed->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
		}
		m_pLabelToolRed->show();
	});
	connect(ui.pushButtonHide, &QPushButton::clicked, this, [=]() {
		m_pLabelToolRed->hide();
	});
	connect(ui.pushButtonNum, &QPushButton::clicked, this, [=]() {
		int num = m_pLabelToolRed->text().toInt()+1;
		if (num > 99)
		{
			m_pLabelToolRed->setFixedSize(22, 16); // 设置小圆点大小 
			//m_pLabelToolRed->move(ui.btTool->width() - 22, 0); // 将小圆点移动到右上角 
			m_pLabelToolRed->move(ui.widgetBubble->width() - 22, 0); // 将小圆点移动到右上角 
			m_pLabelToolRed->setText(QString("99+"));
		}
		else
		{
			m_pLabelToolRed->setText(QString::number(num));
		}
	});
	

}

其实就是把 QLabel 的父句柄改为 QWidget 即可。

原来的按钮放在 QWidget 中间,气泡放在 QWidget 的右上角。

如果想让气泡压住图标一点可以再调整一下纵坐标。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Qt 中,可以通过 QPushButton::setIcon() 来为 QPushButton 添加图片,需要传入一个 QIcon 对象。 以下是一个简单的代码示例: ``` QPushButton *button = new QPushButton; QIcon icon("path/to/icon.png"); button->setIcon(icon); ``` ### 回答2: Qt是一个流行的跨平台应用程序框架,它提供了一组功能强大的GUI类库,可方便地开发桌面应用程序。在Qt中,QPushButton是一个常用的GUI组件,用于创建一个按钮,并在用户单击时启动相应操作。在QPushButton添加图片可以使按钮更具吸引力和可识别性。以下是通过Qt Creator添加图片到QPushButton的步骤: 第1步:选择一个图片 首先,准备一个要添加到QPushButton的图片。您可以选择将图片保存在项目目录中或使用绝对路径。 第2步:向项目添加图片 将图片添加Qt Creator项目中。右键单击项目文件夹,选择"添加已经存在的文件",然后浏览并选择您想要添加的图片。 第3步:打开按钮设计器 在Qt Creator中,单击QPushButton以打开按钮设计器。在设计器中,可以设置按钮的文本、字体、颜色、大小和混合模式等属性。 第4步:添加图片 在设计器中,单击右侧的"图像"选项卡。在"Normal"下,单击"选择"并选择刚才添加的图片。 第5步:应用更改 保存更改并单击运行按钮,以在运行时查看已应用的更改。 这些步骤将为QPushButton添加一个图片,使其看起来更具吸引力和识别性。注意,您可以使用相同的步骤添加不同的图片,以实现更多样化的效果。 ### 回答3: Qt是一款非常优秀的图形用户界面库,它具有非常丰富的功能,可以帮助我们快速地构建出一个美观、简洁、易用的GUI程序。而QPushButtonQt中一种常用的控件。下面,我们将详细介绍如何在Qt中为QPushButton添加图片,让你的界面看起来更加美观。 在Qt中,我们可以为QPushButton设置文本和图片。而对于图片的设置,则可以利用QPushButton的setIcon()函数实现。下面,我们详细介绍如何使用此函数来为QPushButton添加图片。 方法一:利用QPixmap和QIcon 使用QPixmap和QIcon可以为QPushButton添加图片。步骤如下: 1. 将图片文件添加Qt项目中。 2. 在Qt设计器中选择QPushButton,并将它拖入到窗体中。 3. 选中QPushButton,打开属性编辑器。在下方的“常规”选项中找到Icon,点击右侧的按钮“…”。 4. 在弹出的Select Resource对话框中,选择“添加其他文件”,然后选择你需要添加的图片资源。Qt会自动为你生成一个QPixmap对象。 5. 在生成的QPixmap对象上调用scaled()函数,将图片进行缩放(宽和高都不超过按钮的大小)。 6. 在生成的QPixmap对象上调用convertToIcon()函数,将QPixmap对象转换成QIcon对象。 7. 点击OK保存设置,完成为QPushButton添加图片的操作。 方法二:利用QSS QSS是一种用于样式表的语言。利用QSS可以方便地为QWidget及其子类添加样式。可以采用如下方式,通过QSS的方式为QPushButton添加背景图片。 1. 将图片文件添加Qt项目中。 2. 在Qt设计器中选择QPushButton,并将它拖入到窗体中。 3. 在属性编辑器中,为这个QPushButton设置一个名称,比如“myButton”。 4. 在程序运行的时候,在程序代码中使用QPushButton::setStyleSheet()函数来设置QSS。例如: QString css = "QPushButton#myButton{background-image:url(:/images/XXX.png)}"; myButton->setStyleSheet(css); 其中,myButton即为QPushButton的名称, XXX.png为图片的文件名。注意,这里的冒号后面的内容是Qt自动生成的资源前缀。 以上述两种方式为QPushButton添加图片即可,这样就可以为你的GUI应用程序添加更加美观的按钮图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值