效果如圖所示
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LchXR61EdshkYwwmMkZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DO2QTOwAzMwEzMwEDM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
原理如下:
繼承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();
}