Qt之QPainter用法

发布时间 2023-04-18 11:09:13作者: 青衣守旧人
void MainWindow::paintEvent(QPaintEvent *event)
{
    /* 画圆 */
    QRectF rect_ellipse(100.0, 100.0, 80.0, 80.0);
    QPainter painter(this);
    painter.setPen(Qt::blue);
    painter.drawEllipse(rect_ellipse);

    /* 画字 */
    painter.setFont(QFont("Arial", 50));
    painter.drawText(rect(), Qt::AlignCenter, "关于");

    /* 画多边形 */
    QRectF rect_angle(100.0, 20.0, 80.0, 60);
    int start_angle = 30 * 16;
    int span_angle = 120 * 16;
    painter.drawArc(rect_angle, start_angle, span_angle);

    QPointF points[4] = {
        QPointF(10.0, 80.0),
        QPointF(20.0, 10.0),
        QPointF(80.0, 30.0),
        QPointF(90.0, 70.0),
    };
    painter.drawConvexPolygon(points, 4);

    /* 画线 */
    QLineF line(QPoint(0, 0), QPoint(100.0, 100.0));
    painter.drawLine(line);

    QPointF points_1[3] = {
            QPointF(110.0, 180.0),
            QPointF(120.0, 110.0),
            QPointF(180.0, 130.0),
        };
    painter.drawPolyline(points_1, 3);

    /* 画矩形 */
    QRectF rectangle(200.0, 20.0, 80.0, 60.0);
    painter.drawRect(rectangle);

    /* 画圆角矩形 */
    QRectF rectangle_1(200.0, 120.0, 80.0, 60.0);
    painter.drawRoundedRect(rectangle_1, 15.0, 15.0);


    /* 画单个点 */
    QPen pen;
    pen.setWidth(6);
    pen.setColor(Qt::red);
    painter.setPen(pen);
    painter.drawPoint(200, 200);

    /* 画多个点 */
    QPointF point[10];
    painter.setPen(pen);
    for (int i = 0; i < 10; ++i) {
        point[i].setX(2.0 + i * 10);
        point[i].setY(130.0);
    }
    painter.drawPoints(point, 10);


    /* 画单个直线 */
    pen.setWidth(5);
    pen.setColor(Qt::red);
    painter.setPen(pen);
    painter.drawLine(rect().topLeft(), rect().bottomRight());

    /* 画圆点 */
    painter.setPen(QColor(Qt::transparent));
    painter.setBrush(QBrush(Qt::red));
    painter.drawEllipse(100,250,10,10);

    QWidget::paintEvent(event);
}