QPainter的使用(畫國旗)

國慶比較無聊,然後用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]);

    }

這裏寫圖片描述

發佈了60 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章