Qt自绘之旋转八卦图

在这里插入图片描述

#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;
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值