天天看點

QT 按鈕上的數字氣泡

效果如圖所示

QT 按鈕上的數字氣泡

原理如下:

繼承QPushButton類,然後重繪按鈕,

QT 按鈕上的數字氣泡

注意着色面積與原面積的大小關系,還有小圓圈位置。

哦啦,恭喜你,你也會了!

源碼如下:

//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();

}

繼續閱讀