QT绘制同心扇形

cpp 复制代码
void ChartForm::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);// 设置抗锯齿
    painter.save();

    // 设置无边框(不需要设置QPen,因为默认是不绘制边框的)
    QPen pen(Qt::NoPen);
    // QPen pen(Qt::black, 1);
    painter.setPen(pen);

    QRect rect;

    int step = 50;          // 内圈和外圈的距离
    int sRange = 8;         // 扇形向外绘制的范围(圈数)
    int numSlices = 16;     // 分成多少个扇形
    int lenght = 2 * step;  // 矩形边长
    // 计算扇形的中心点、半径、起始角度和跨度角度
    int centerX = width() / 2;
    int centerY = height() / 2;

    // 生成颜色(这里简单地使用彩虹色)
    QVector<QColor> colors;
    for (int i = 0; i <= sRange; ++i)
    {
        float hue = (float)i / sRange * 360.0f;
        colors.append(QColor::fromHsvF(hue / 360.0f, 1.0f, 1.0f));
    }

    // 绘制每个扇形
    for (int i = 0; i < numSlices; ++i)
    {
        double startAngle = i * 360.0f / numSlices;
        double spanAngle = 360.0f / numSlices;

        for(int idx = 1; idx <= sRange; idx ++)
        {
            QPoint startPt(centerX - idx * step, centerY - idx * step);
            rect.setRect(startPt.x(), startPt.y(), lenght + idx * lenght, lenght + idx * lenght);// 外圈

            int inRadius = idx * lenght;

            QRectF innerRect(startPt.x() + step, startPt.y() + step,inRadius,inRadius);// 内圈

            QPointF outStartPoint;
            outStartPoint.rx() += rect.center().x();
            outStartPoint.ry() = rect.center().y() - outStartPoint.y();

            QPainterPath path;// 创建一个QPainterPath对象
            path.moveTo(outStartPoint); //先移动到圆心
            path.arcTo(rect, startAngle, spanAngle);// 参数(矩形左上角坐标,弧的宽度,弧的高度,起始角,画多少度)
            path.arcTo(innerRect, startAngle + spanAngle, -spanAngle);// 参数(矩形左上角坐标,弧的宽度,弧的高度,起始角,画多少度)
            path.closeSubpath(); // 闭合路径(可选)
            painter.setBrush(colors[idx]);
            painter.drawPath(path);
        }
    }
    painter.restore();
}

执行结果如下图所示:

相关推荐
漫步企鹅13 小时前
【VS Code - Qt】如何基于Docker Linux配置Windows10下的VS Code,开发调试ARM 版的Qt应用程序?
linux·qt·docker·arm·vs code·开发调试
pzzqq14 小时前
buildroot编译qt 5.9.8 arm64版本踩坑
开发语言·qt
还债大湿兄15 小时前
基于Qt Property Browser的通用属性系统:Any类与向量/颜色属性的完美结合
开发语言·qt
luciferau1 天前
Qt: WA_DontCreateNativeAncestors
qt
钱彬 (Qian Bin)2 天前
AI质检数据准备利器:基于Qt/QML 5.14的图像批量裁剪工具开发实战
qt·自定义·图像·qml·qt quick·裁剪工具
啊森要自信2 天前
【QT】常⽤控件详解(七)容器类控件 GroupBox && TabWidget && 布局管理器 && Spacer
linux·开发语言·c++·qt·adb
郝学胜-神的一滴2 天前
Horse3D引擎研发笔记(一):从使用Qt的OpenGL库绘制三角形开始
c++·qt·3d·unity·图形渲染·unreal engine
啊森要自信2 天前
【QT】常⽤控件详解(六)多元素控件 QListWidget && Table Widget && Tree Widget
c语言·开发语言·c++·qt
ZPC82103 天前
参数服务器 server and client
服务器·qt
牵牛老人3 天前
Qt中的QWebSocket 和 QWebSocketServer详解:从协议说明到实际应用解析
开发语言·qt·网络协议