Qt小玩意儿——变色魔法阵(QPainter的部分应用)

效果如下:
在这里插入图片描述
头文件:

#ifndef MAGIC_H
#define MAGIC_H#include 
#include class Magic : public QWidget
{Q_OBJECT
public:explicit Magic(QWidget *parent = nullptr);~Magic();protected:QPoint rotatePoint(QPoint center,QPoint p1,qreal angle);void paintEvent(QPaintEvent *event);void timerEvent(QTimerEvent *event);void drawEquilateralTriangle(QPainter &painter,QPoint center,qreal r,qreal angle);private:qreal m_r_1 = 100;qreal m_r_2 = 120;qreal m_angle = 0.0;QColor m_color_1 = Qt::red;QColor m_color_2 = Qt::blue;QColor m_color_3 = Qt::green;int m_nTimeID = -1;
};#endif // MAGIC_H

源文件:

#include "magic.h"
#include 
#include 
#include 
#include Magic::Magic(QWidget *parent) : QWidget(parent)
{this->resize(500,500);m_nTimeID = this->startTimer(1000/20);}Magic::~Magic()
{this->killTimer(m_nTimeID);
}QPoint Magic::rotatePoint(QPoint center, QPoint p1, qreal angle)
{qreal x = center.x() + (p1.x() - center.x()) * qCos(qDegreesToRadians(angle)) -(p1.y() - center.y()) * qSin(qDegreesToRadians(angle));qreal y = center.y() + (p1.y() - center.y()) * qCos(qDegreesToRadians(angle)) +(p1.x() - center.x()) * qSin(qDegreesToRadians(angle));return QPoint(x,y);
}void Magic::paintEvent(QPaintEvent *event)
{QWidget::paintEvent(event);QPoint center = QPoint(this->width()/2,this->height()/2);QPainter painter(this);painter.fillRect(0,0,this->width(),this->height(),QColor(65,65,65)); //背景色painter.setPen(QPen(m_color_1));//绘制第一个三角形drawEquilateralTriangle(painter,center,-m_r_1,m_angle);//绘制第二个三角形drawEquilateralTriangle(painter,center,m_r_1,m_angle);//绘制内圆painter.setPen(QPen(m_color_2));painter.drawEllipse(center.x() - m_r_1,center.y() - m_r_1, m_r_1 * 2,m_r_1 * 2);//绘制外圆painter.drawEllipse(center.x() - m_r_2,center.y() - m_r_2, m_r_2 * 2,m_r_2 * 2);//绘制符咒QString texts = QStringLiteral("ⅠMagicⅡMagicⅢMagicⅣMagicⅤMagicⅥMagicⅦMagicⅧMagicⅨMagicⅩ");int len = texts.length();int i = 0;qreal angle = 360.0f / len;center += QPoint(-5,5);QPoint p1 = center + QPoint(0,-m_r_1 - 10);painter.setPen(QPen(m_color_3));QPoint p2 = p1;for(auto s:texts){painter.save();painter.drawText(p2,s);i++;p2 = rotatePoint(center,p1,angle * i - m_angle);painter.restore();}}void Magic::timerEvent(QTimerEvent *event)
{QWidget::timerEvent(event);m_angle += 10;if(m_angle > 360){m_angle = 0;}m_color_1 = QColor(qrand() % 255,qrand() % 255,qrand() % 255);m_color_2 = QColor(qrand() % 255,qrand() % 255,qrand() % 255);m_color_3 = QColor(qrand() % 255,qrand() % 255,qrand() % 255);update();
}void Magic::drawEquilateralTriangle(QPainter &painter, QPoint center, qreal r, qreal angle)
{QPainterPath triangle;painter.save();QPoint start = QPoint(center.x(),center.y() + r);start = rotatePoint(center,start,angle);triangle.moveTo(start);triangle.lineTo(rotatePoint(center,start,120));triangle.lineTo(rotatePoint(center,start,-120));triangle.lineTo(start);painter.drawPath(triangle);painter.restore();
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部