Qt实现艺术字效果

15 篇文章 0 订阅

    Qt实现艺术字效果,通常有三种方式,一种是通过绘制机制,另外一种是使用样式表,最后一种是通过图片代替,本次介绍使用绘制来实现艺术字效果。

    代码如下(分两种实现):

    第一种:

        QPainter painter(this);
        QPen pen;
        pen.setWidth(2);
        pen.setColor(Qt::red);

        painter.setRenderHint(QPainter::Antialiasing, true);
        painter.setPen(pen);

        QLinearGradient linearGrad;
        bool ifTransparent = false;
        if (ifTransparent){
            linearGrad.setColorAt(0, Qt::transparent);     // 字体透明 只有边框
        } else {
            linearGrad.setColorAt(0, Qt::blue);            // 字体利用特定颜色来填充
        }

        QFont font;
        font.setPointSize(40);
        font.setBold(true);

        QPainterPath textPath;
        QRect painterRect = rect();
        QString str = QStringLiteral("花莫弦");

        textPath.addText(width() / 2, painterRect.bottom() / 2, font, str);
        painter.setBrush(linearGrad);
        painter.drawPath(textPath);

    效果图:        

    第二种:

        QPainter painter(this);
        QFont font;
        font.setPointSize(40);
        font.setBold(true);

        QFontMetrics metrics(font);
        QPainterPath path;
        QPen pen(QColor(255, 0, 0, 100));
        int penWidth = font.pointSize() * 0.5;
        if (penWidth > 6) {
            penWidth = 6;
        }
        pen.setWidth(penWidth);

        int len = metrics.width(QStringLiteral("花莫弦"));
        int w = width();
        int px = (len - w) / 2;
        if (px < 0) {
            px = -px;
        }

        int py = (height() - metrics.height()) / 2 + metrics.ascent();
        if(py < 0)
        {
            py = -py;
        }
        path.addText(px, py, font, QStringLiteral("花莫弦"));
        painter.strokePath(path, pen);
        painter.drawPath(path);
        painter.fillPath(path, QBrush(Qt::blue));
    效果图:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值