效果如图所示
原理如下:
继承QPushButton类,然后重绘按钮,
注意着色面积与原面积的大小关系,还有小圆圈位置。
哦啦,恭喜你,你也会了!
源码如下:
//BubblelTipButton.h
class BubblelTipButton :  public QPushButton
 {
 public:
     BubblelTipButton(QWidget *parent);
     virtual ~BubblelTipButton(void);
    virtual void paintEvent(QPaintEvent * event);
 };
//BubblelTipButton.cpp
BubblelTipButton::BubblelTipButton(QWidget *parent)
     : QPushButton(parent)
 {
 }
 BubblelTipButton::~BubblelTipButton(void)
 {
 }
 #define LABEL_WIDTH 20
 #define BORDER_WIDTH 5
 void BubblelTipButton::paintEvent(QPaintEvent * event)
 {
     QPainter painter(this);
     QRect rt = rect();
     QRect rt1 = QRect(rt.right()-LABEL_WIDTH, rt.top(), LABEL_WIDTH, LABEL_WIDTH);
     QRect rt2 = QRect(rt.left()+BORDER_WIDTH, rt.top()+BORDER_WIDTH, 
         rt.width()-2*BORDER_WIDTH, rt.height()-2*BORDER_WIDTH);
     painter.fillRect(rt2, Qt::green);
     
     painter.setPen(Qt::red);
     painter.setBrush(QBrush(Qt::red)); 
     painter.drawEllipse(rt1);
    painter.setPen(Qt::blue);
     painter.drawText(rt1, Qt::AlignCenter, “99”);
     painter.drawText(rt, Qt::AlignCenter, text());
 }
///
有童鞋竟然问我怎么用
1、用qt设计师把按钮拖到QWidget中,然后把QPushButton提升成BubblelTipButton,即可。
2、用下面的代码
//main.cpp
#include <QtWidgets/QApplication>
#include “BubblelTipButton.h”
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
   QWidget w;
     w.setFixedSize(600, 400);
     BubblelTipButton  * pBtn = new BubblelTipButton(&w);
     pBtn->setFixedSize(100, 50);
     pBtn->setText(QStringLiteral(“渡渡”));
     w.show();
     return a.exec();
}