一、绘制基础Qt 所有自定义绘图基于QPainter 绘图器规则自定义类继承QWidget重写纯虚函数paintEvent(QPaintEvent *event)在函数内使用 QPainter 完成绘制。二、示例 1纯圆形控件cpp运行// .h protected: void paintEvent(QPaintEvent *event) override; // .cpp void MyWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 开启抗锯齿 // 绘制圆形 painter.setBrush(QBrush(QColor(66,184,221))); painter.setPen(Qt::NoPen); painter.drawEllipse(rect()); // 基于控件外接矩形画圆 }三、示例 2环形进度条cpp运行void MyWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); int progress 60; // 进度 0~100 QRect rect this-rect().adjusted(10,10,-10,-10); // 背景圆环 painter.setPen(QPen(QColor(#cccccc),8)); painter.drawArc(rect, 0, 360*16); // 进度圆环 painter.setPen(QPen(QColor(#00b894),8)); int angle progress * 360 * 16 / 100; painter.drawArc(rect, 90*16, -angle); // 从顶部开始逆时针绘制 }四、示例 3简易仪表盘刻度 指针cpp运行void MyWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); QPoint center rect().center(); // 外圈圆弧刻度 painter.setPen(QPen(Qt::darkGray,2)); painter.drawArc(rect().adjusted(20,20,-20,-20), 180*16, 180*16); // 中心圆点 painter.setBrush(Qt::black); painter.drawEllipse(center,5,5); // 指针 painter.setPen(QPen(Qt::red,3)); painter.drawLine(center, QPoint(center.x()40, center.y()30)); }五、关键要点setRenderHint(QPainter::Antialiasing)必须开启消除锯齿drawArc角度单位1 度 16 单位动态刷新调用update()触发paintEvent重绘。小结paintEvent是绘制入口QPainter 提供点、线、圆、矩形、文字、图片全套绘制能力复杂 UI 都可纯代码手绘。