您的位置:首页 > 大数据 > 人工智能

QPainter的使用(画国旗)

2016-10-06 15:39 344 查看
国庆比较无聊,然后用Qt的QPainter画了一面国旗,代码如下:

国旗标准尺寸

源码地址

//代码不是全部代码,只有主要代码
void MainWindow::paintEvent(QPaintEvent *e)
{
qint64 k = 15;
qint64 width = 24;
qint64 height = 16;
QPainter p(this);
p.setBrush(QColor("#F40002"));
p.setPen(QColor("#FFFFFF"));
p.drawRect(0, 0, width*k, height*k);
//首先将坐标原点设为大五角星的中心
p.translate(60, 60);
p.setBrush(QColor("#FAF408"));
p.setPen(QColor("#FAF408"));

//
//画大五角星
QPoint points[3] = {QPoint(0, -36), QPoint(-12, 0),QPoint(12, 0)};
p.setRenderHint(QPainter::Antialiasing);
for(int i = 0; i < 5; i ++)
{
//画三角形构成五角星
p.rotate(72);
p.drawConvexPolygon(points, 3);
}

//四颗小星的中心点
QPoint transLate[4] = {QPoint(60, -36), QPoint(24, 24), QPoint(0, 36), QPoint(-24, 24)};
//四颗小星的偏转角度
qreal rotateAngle[4] = {-90-qRadiansToDegrees(qAtan(0.6)), -90-qRadiansToDegrees(qAtan(1.0/7.0)),
-qRadiansToDegrees(qAtan(3.5)), -qRadiansToDegrees(qAtan(1.25))};
//1
QPoint points1[3] = {QPoint(0, -12), QPoint(-5, 0),QPoint(5, 0)};

for(int i = 0; i < 4; i ++)
{
p.translate(transLate[i]);
//每次画小五角星前将坐标设为要画的五角星的中心
p.rotate(rotateAngle[i]);
//并且每次都旋转一个角度以对准大五角星
for(int i = 0; i < 5; i ++)
{
p.rotate(72);//五角星由五个三角形组成,每次旋转72°,旋转5次得到五角星
p.drawConvexPolygon(points1, 3);
//画组成五角星的三角形
}
p.rotate(-rotateAngle[i]);

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt 国旗