我正在尝试显示一个圆形的头像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);
}
发布于 2018-06-05 05:02:31
在Qt中,您使用画笔绘制填充,但轮廓是使用QPen
绘制的。
我很久没有使用QPainter
了,但是IIRC,默认的笔是零宽度,这可以解释为什么你什么都得不到--你没有设置笔。
此外,您不需要“另一个”圆角矩形,您可以将填充和轮廓应用于相同的几何图形,as demonstrated in this answer。
更新:
您更新的代码设置了一个遮罩,这将设置一个alpha通道。这从你已经拥有的东西中去掉了,它不可能增加任何东西。你必须在像素图上作画。只需使用new_avatar
作为绘制设备- QPainter painter(&new_avatar);
,然后去掉其余部分。
https://stackoverflow.com/questions/50687993
复制相似问题