如何为圆角QPixmap添加边框?

时间:2018-06-04 20:02:28

标签: qt

我试图展示一个带有白色边框的圆形化身QPixMap。但是,我不知道如何添加边框......它甚至可能吗?

这是我绘制头像图片的功能。

void AccountDropDownMenu::setAvatar(
        const QByteArray& bytes)
{
    QPixmap new_avatar;
    new_avatar.loadFromData(bytes);
    new_avatar = new_avatar.scaledToHeight(40, Qt::SmoothTransformation);


    QBitmap map(new_avatar.size());
    map.fill(Qt::color0);

    QPainter painter(&map);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setBrush(Qt::color1);
    painter.setPen(QPen(Qt::white, 10));
    painter.drawRoundedRect(
            m_avatar_label->x(),
            m_avatar_label->y(),
            new_avatar.width(),
            new_avatar.height(),
            45,
            45);

    new_avatar.setMask(map);

    avatar_label->setPixmap(new_avatar);
}

更新

感谢dtech我能够使用以下更新的函数获得所需的输出....虽然它有点像素(边框)。

void AccountDropDownMenu::setAvatar(
        const QByteArray& bytes)
{
    QPixmap new_avatar;
    new_avatar.loadFromData(bytes);
    new_avatar = new_avatar.scaledToHeight(40, Qt::SmoothTransformation);


    QBitmap map(new_avatar.size());
    map.fill(Qt::color0);

    QPainter painter(&map);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setBrush(Qt::color1);
    painter.drawRoundedRect(
                QRectF(
                    avatar_label->x(),
                    avatar_label->y(),
                    new_avatar.width(),
                    new_avatar.height()),
                40,
                40);
    new_avatar.setMask(map);

    QPainter painter2(&new_avatar);
    painter2.setRenderHint(QPainter::Antialiasing);
    painter2.setPen(QPen(Qt::white, 1));
    painter2.drawRoundedRect(
                QRectF(
                    avatar_label->x(),
                    avatar_label->y(),
                    new_avatar.width(),
                    new_avatar.height()),
                40,
                40);

    avatar_label->setPixmap(new_avatar);
}

1 个答案:

答案 0 :(得分:2)

在Qt中,您使用画笔绘制填充,但使用QPen绘制轮廓。

我很久没有使用QPainter,但是IIRC,默认笔是零宽度,这可以解释为什么你没有得到任何东西 - 你没有设置笔。

另外,你不需要"另一个"圆角矩形,您可以将填充和轮廓应用于相同的几何体as demonstrated in this answer

更新

您更新的代码设置了一个遮罩,用于设置Alpha通道。这削减了你已经拥有的,它不可能添加任何东西。你必须在像素图上画画。只需使用new_avatar作为绘图设备 - QPainter painter(&new_avatar);并摆脱其余部分。