效果图如下:
mytabbar.h
#ifndef MYTABBAR_H
#define MYTABBAR_H
#include <QtWidgets>
class myTabBar : public QTabBar
{
Q_OBJECT
public:
explicit myTabBar(QWidget *parent = 0);
void showDot(int, bool);
signals:
public slots:
// QWidget interface
protected:
void paintEvent(QPaintEvent *event);
QMap<int, bool>indexs;
bool bShowDot;
};
#endif // MYTABBAR_H
mytabbar.cpp
#include "mytabbar.h"
#include <QPainter>
myTabBar::myTabBar(QWidget *parent) : QTabBar(parent), bShowDot(false)
{
}
void myTabBar::showDot(int i, bool b)
{
indexs[i] = b;
update();
}
//tab画红点
void myTabBar::paintEvent(QPaintEvent *event)
{
QTabBar::paintEvent(event);
for(int i = 0 ; i < this->count(); i++){
QImage img(10,10,QImage::Format_ARGB32);
img.fill(Qt::transparent);
QPainter p(&img);
p.setBrush(Qt::red);
p.setPen(Qt::transparent);
p.drawEllipse(0,0,10,10);
QRect rc = this->tabRect(i);
if(!rc.isNull()&&indexs[i]){
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QRect rect(0,0,10,10);
rect.moveTopRight(rc.topRight());
painter.drawImage(rect, img);
}
}
}
使用:
myTabBar *bar = new myTabBar(this);
bar->showDot(0, false);
bar->showDot(1, true);
bar->addTab(QString::fromLocal8Bit("栏目一"));
bar->addTab(QString::fromLocal8Bit("栏目二"));