我试图展示一个带有白色边框的圆形化身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);
}
答案 0 :(得分:2)
在Qt中,您使用画笔绘制填充,但使用QPen
绘制轮廓。
我很久没有使用QPainter
,但是IIRC,默认笔是零宽度,这可以解释为什么你没有得到任何东西 - 你没有设置笔。
另外,你不需要"另一个"圆角矩形,您可以将填充和轮廓应用于相同的几何体as demonstrated in this answer。
更新
您更新的代码设置了一个遮罩,用于设置Alpha通道。这削减了你已经拥有的,它不可能添加任何东西。你必须在像素图上画画。只需使用new_avatar
作为绘图设备 - QPainter painter(&new_avatar);
并摆脱其余部分。