QPainter添加效果

模糊效果

实现

void Button::paintEvent(QPaintEvent *event)
{
    QColor bg;
    if (isEnabled())
    {
        if (isDown())
        {
            bg.setRgb(78, 131, 253);
        }
        else
        {
            bg.setRgb(51, 112, 255);
        }
    }
    else
    {
        bg.setRgb(100, 106, 115);
    }

    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::HighQualityAntialiasing);
    painter.setPen(Qt::transparent);
    painter.setBrush(bg);

    painter.drawRoundedRect(rect(), 8, 8);

    painter.setPen(palette().buttonText().color());

    /** 模糊效果 */
    QGraphicsBlurEffect *blur = new QGraphicsBlurEffect(this);
    blur->setBlurRadius(1.5);
    QGraphicsScene scene(this);
    QGraphicsPixmapItem item;
    QPixmap img(width(), height());
    img.fill(Qt::transparent);
    QPainter p_img;
    p_img.begin(&img);
    p_img.setPen(Qt::red);
    QFont ff;
    ff.setPixelSize(32);
    p_img.setFont(ff);
    p_img.drawText(img.rect(), Qt::AlignCenter, text());
    p_img.end();
    item.setPixmap(img);
    item.setGraphicsEffect(blur);

    scene.addItem(&item);
    scene.render(&painter);

    event->accept();
}
posted @ 2022-03-07 15:12  爱弹钢琴的卡农  阅读(122)  评论(0)    收藏  举报