qt实现带数字的消息通知

cpp 复制代码
#include <QPushButton>
#include <QLabel>
#include <QHBoxLayout>

class BadgeButton : public QPushButton
{
    Q_OBJECT
public:
    explicit BadgeButton(QWidget *parent = nullptr) : QPushButton(parent)
    {
        // 创建提示徽章(红色背景+数字)
        m_badge = new QLabel(this);
        m_badge->setStyleSheet(R"(
            background-color: red;
            color: white;
            border-radius: 8px;  /* 圆角 */
            font-size: 12px;
            padding: 0px 4px;    /* 左右留白,让数字居中 */
        )");
        m_badge->setAlignment(Qt::AlignCenter);  // 文字居中
        m_badge->hide();  // 默认隐藏
    }

    // 设置未读数量(0则隐藏,>9显示"9+")
    void setUnreadCount(int count)
    {
        if (count <= 0) {
            m_badge->hide();
            return;
        }
        // 超过9条显示"9+"
        m_badge->setText(count > 9 ? "9+" : QString::number(count));
        // 调整徽章大小(根据文字长度自动适应)
        m_badge->adjustSize();
        // 确保最小尺寸(至少能显示一个数字)
        m_badge->setMinimumSize(16, 16);
        m_badge->show();
        // 更新位置
        updateBadgePosition();
    }

protected:
    // 按钮大小改变时更新徽章位置
    void resizeEvent(QResizeEvent *event) override
    {
        QPushButton::resizeEvent(event);
        updateBadgePosition();
    }

private:
    QLabel *m_badge;

    // 更新徽章到右上角
    void updateBadgePosition()
    {
        if (!m_badge->isVisible()) return;
        // 右上角定位(向右上方偏移,避免完全贴边)
        int x = width() - m_badge->width() + 2;  // 右偏移2px(部分超出按钮边缘更美观)
        int y = -m_badge->height() / 2;          // 上偏移一半高度(部分超出顶部)
        m_badge->move(x, y);
    }
};

使用方法

cpp 复制代码
BadgeButton *btn = new BadgeButton(this);
btn->setText("消息");
btn->setGeometry(50, 50, 100, 40);
btn->setUnreadCount(3);  // 显示3条未读
// btn->setUnreadCount(15);  // 显示"9+"
相关推荐
用户805533698032 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner2 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz7 天前
QML Hello World 入门示例
qt
xcyxiner10 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner11 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner11 天前
DicomViewer (添加模型类)3
qt
xcyxiner12 天前
DicomViewer (目录调整) 2
qt
xcyxiner12 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
桥田智能14 天前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
森G14 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt