#pragma once
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QTimer>
#include <cmath>
class Widget : public QWidget {
public:
Widget(QWidget *parent = nullptr) : QWidget(parent) {
setFixedSize(400, 400);
setWindowTitle("八卦图");
timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &Widget::updateAngle);
timer->start(1);
angle = 0;
}
protected:
void paintEvent(QPaintEvent *) override {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.translate(width() / 2, height() / 2);
painter.rotate(angle);
// 绘制圆形
painter.setBrush(Qt::white);
painter.drawEllipse(-100, -100, 200, 200);
// 绘制上半部分
painter.setBrush(Qt::black);
painter.drawChord(-100, -100, 200, 200, 90 * 16, 180 * 16);
painter.setBrush(Qt::white);
painter.save();
QPen pen(Qt::white);
painter.setPen(pen);
painter.drawEllipse(-50, -100, 100, 100);
painter.restore();
painter.setBrush(Qt::black);
painter.drawEllipse(-10, -60, 20, 20);
//painter.setBrush(Qt::black);
//painter.drawChord(-50, 0, 100, 100, 270 * 16, 180 * 16);
// 绘制下半部分
//painter.setBrush(Qt::white);
//painter.drawChord(-100, 0, 200, 200, 270 * 16, 180 * 16);
painter.setBrush(Qt::black);
painter.drawEllipse(-50, 0, 100, 100);
//painter.setBrush(Qt::white);
//painter.drawChord(-50, -100, 100, 100, 90 * 16, 180 * 16);
painter.setBrush(Qt::white);
painter.drawEllipse(-10, 40, 20, 20);
}
private:
void updateAngle() {
angle += 1;
if (angle >= 360) {
angle = 0;
}
update();
}
QTimer *timer;
int angle;
};
Qt自绘之旋转八卦图
于 2023-05-29 08:14:30 首次发布