Skip to main content
标签ad报错:该广告ID(9)不存在。
  主页 > Qt入门

一个qt/c++ demo,用于显示分星图

2023-04-24 浏览:
标签ad报错:该广告ID(7)不存在。
#include <QApplication>
   #include <QMainWindow>
   #include <QPainter>
   
   class StarChart : public QWidget
   {
   public:
       enum { NUM_STARS = 5 };
   
       StarChart(QWidget *parent = nullptr) : QWidget(parent) {}
   
       QSize minimumSizeHint() const override { return QSize(200, 200); }
       QSize sizeHint() const override { return QSize(400, 400); }
   
   protected:
       void paintEvent(QPaintEvent *event) override
       {
           Q_UNUSED(event);
   
           QPainter painter(this);
   
           // 获取当前宽度和高度
           int w = width();
           int h = height();
   
           // 计算圆形的半径
           int radius = qMin(w, h) / 2 - 10;
   
           // 设置画笔颜色和宽度
           painter.setPen(QPen(Qt::black, 2));
   
           // 计算星宽度
           int starWidth = radius / NUM_STARS;
   
           // 绘制分星图
           for (int i = 0; i < NUM_STARS; i++) {
               int innerRadius = i * starWidth;
               int outerRadius = innerRadius + starWidth;
               int angle = 360 / NUM_STARS;
               int startAngle = i * angle - angle / 2;
               int spanAngle = angle;
   
               painter.drawPie(w/2-radius, h/2-radius, radius*2, radius*2, startAngle*16, spanAngle*16);
               painter.drawPie(w/2-innerRadius, h/2-innerRadius, innerRadius*2, innerRadius*2, startAngle*16, spanAngle*16);
           }
       }
   };
   
   int main(int argc, char *argv[])
   {
       QApplication app(argc, argv);
   
       QMainWindow window;
       StarChart *chart = new StarChart();
       window.setCentralWidget(chart);
       window.show();
   
       return app.exec();
   }

   


   在这个示例中,我们通过自定义绘图实现了一个分星图。我们首先获取了当前QWidget的宽度和高度,然后计算出圆形的半径。
   接着,我们设置画笔颜色和宽度,并计算出星宽度。最后,我们使用drawPie方法绘制了整个圆和圆心部分的扇形区域,从而形成了分星图的效果。