#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方法绘制了整个圆和圆心部分的扇形区域,从而形成了分星图的效果。