首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在圆角QPixmap中添加边框?

如何在圆角QPixmap中添加边框?
EN

Stack Overflow用户
提问于 2018-06-05 04:02:28
回答 1查看 1.5K关注 0票数 0

我正在尝试显示一个圆形的头像QPixMap,周围有白色的边框。但是,我不知道如何添加边框...这有可能吗?

这是我用来绘制头像图像的函数。

代码语言:javascript
复制
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,我能够使用以下更新后的函数获得所需的输出。尽管它有点小精灵(边界)。

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 05:02:31

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

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

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

更新:

您更新的代码设置了一个遮罩,这将设置一个alpha通道。这从你已经拥有的东西中去掉了,它不可能增加任何东西。你必须在像素图上作画。只需使用new_avatar作为绘制设备- QPainter painter(&new_avatar);,然后去掉其余部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50687993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档