1、红色圆环
代码部分
void MainWindow::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
painter.save();
//设置反锯齿
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::Qt4CompatiblePainting);
QRect drawRect = event->rect();
QRegion region(drawRect.adjusted(10,10,-10,-10),QRegion::Ellipse);
drawRect.setSize(QSize(drawRect.width()/2,drawRect.height()/2));
drawRect.moveTopLeft(QPoint((event->rect().width() - drawRect.width())/2,(event->rect().height() - drawRect.height())/2));
QRegion region2(drawRect,QRegion::Ellipse);
QPainterPath painterPath;
painterPath.addRegion(region.subtracted(region2));
painter.fillPath(painterPath,Qt::red);
event->accept();
painter.restore();
}
2
代码部分
void MainWindow::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.save();
//设置反锯齿
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform| QPainter::Qt4CompatiblePainting);
QRect drawRect = event->rect();
QRegion region(drawRect.adjusted(8,8,-8,-8),QRegion::Ellipse);
drawRect.setSize(QSize(drawRect.width()/2,drawRect.height()/2));
drawRect.moveTopLeft(QPoint((event->rect().width() - drawRect.width())/2,(event->rect().height() - drawRect.height())/2));
QRegion region2(drawRect,QRegion::Ellipse);
painter.setClipRegion(region.subtracted(region2));
painter.fillRect(region.boundingRect(),Qt::yellow);
event->accept();
painter.restore();
}
3、在圆的中心画一个与背景颜色相同的园
代码:
void MainWindow::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.save();
//设置反锯齿
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::Qt4CompatiblePainting);
QRect drawRect = event->rect();
painter.setBrush(Qt::yellow);
painter.drawEllipse(drawRect.adjusted(10,10,-10,-10));
painter.setBrush(painter.background());
painter.drawEllipse(drawRect.adjusted(drawRect.width()/4,drawRect.height()/4,-drawRect.width()/4,-drawRect.height()/4));
event->accept();
painter.restore();
}
4、采用线型渐变,在中心位置到内环半径位置为透明,环部分为颜色值。这里的半径位置在线形渐变中用比例表示,这种只能画圆环,椭圆环不行
代码部分:
void MainWindow::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.save();
//设置反锯齿
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::Qt4CompatiblePainting);
QRect drawRect = event->rect();
QRadialGradient rg(drawRect.center(),drawRect.width()/2,drawRect.center());
rg.setColorAt(0,Qt::transparent);
rg.setColorAt(0.6,Qt::transparent);
rg.setColorAt(0.61,Qt::blue);
rg.setColorAt(1,Qt::blue);
painter.setBrush(rg);
painter.drawEllipse(drawRect);
event->accept();
painter.restore();
}
5、画一个饼图,中间显示百分比
代码部分:
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing);
int m_persent = 56;//绘制的环的比例
int m_rotateAngle = 360*m_persent/100;
int side = qMin(width(), height());
QRectF outRect(0, 0, side, side);//矩形长宽为窗口的长宽
QRectF inRect(20, 20, side-40, side-40);
QString valueStr = QString("%1%").arg(QString::number(m_persent));
//画外圆
p.setPen(Qt::NoPen);
p.setBrush(QBrush(QColor(97, 117, 118)));
p.drawEllipse(outRect);
//画内圆
p.setBrush(QBrush(QColor(255, 107, 107)));
p.drawPie(outRect, (90-m_rotateAngle)*16, m_rotateAngle*16);
//画遮罩,遮罩颜色为窗口颜色
p.setBrush(palette().window().color());
p.drawEllipse(inRect);
//画文字
QFont f = QFont("Microsoft YaHei", 15, QFont::Bold);
p.setFont(f);
p.setFont(f);
p.setPen(QColor("#555555"));
p.drawText(inRect, Qt::AlignCenter, valueStr);
本文转载自:
https://blog.youkuaiyun.com/wanghualin033/article/details/78704274