【问题标题】:Circle user avatar issue圈子用户头像问题
【发布时间】:2018-01-27 10:40:28
【问题描述】:

我想用图片圈做QLabel

代码:

QLabel *label = new QLabel(this);
QPixmap avatarPixmap(":/Icon/default_avatar.png");
label->setPixmap(avatarPixmap);
label->setStyleSheet("border: 0.5px solid red; border-radius: 50%; background-clip: padding;");

它只对QLabel 进行舍入,而不是图像。如何解决?谢谢。

更新:

唯一的方法是为QLabel覆盖paintEvent

代码:

void AccountImage::paintEvent(QPaintEvent *event)
{
    QPixmap pixmap(":/Icon/default_avatar.png");
    QBrush brush(pixmap);
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setBrush(brush);
    painter.drawRoundedRect(0, 0, width(), height(), 100, 100);
    QLabel::paintEvent(event);
}

图像是圆形的,但未正确缩放。有什么想法吗?

【问题讨论】:

  • @liliscent 修改图片是什么意思?
  • @liliscent 将边框图像应用于QLabel 在我的情况下不起作用,我需要稍后通过代码更改默认图像。有没有办法重绘QLabel
  • @liliscent 我已经为QLabel 覆盖了paintEvent。我会将更改添加到我的主要帖子中。

标签: c++ qt windows-applications


【解决方案1】:

尝试在标签上设置掩码,例如:

int w = // set the width here
int h = // set the height here
QRect *rct = new QRect(0, 0, w, h);
QRegion *reg = new QRegion(*rct, QRegion::Ellipse);
label->setMask(*reg);

见:http://doc.qt.io/archives/qt-4.8/qwidget.html#setMask

【讨论】:

  • 看起来不错,但图像边缘锐化。任何想法如何平滑它?
  • 关于 Pixmap,您可以尝试使用带有 Qt::SmoothTransformation 的 QPixmap::transformed() -> 这将为您提供一个转换后的 Pixmap 副本,您可以将其用于您的标签。但我不确定这是否修复了边界本身。也许您也可以尝试使用边框样式:开始。如果这不起作用,也许您可​​以定义自己的小部件,覆盖paintEvent并使用抗锯齿绘制自己的东西。
  • 好的。我会试试。谢谢。
  • 是的,我已经通过覆盖QLabel paintEvent 正确设置了它。我将在这里发布代码,以便用户可以更快地找到解决方案。
【解决方案2】:

通过覆盖QLabelpaintEvent方法解决。

代码:

void AccountImage::paintEvent(QPaintEvent *event)
{
    QPixmap pixmap(":/Icon/my_avatar.png");
    QPixmap scaled = pixmap.scaled(width(), height(), Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);
    QBrush brush(scaled);
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setBrush(brush);
    painter.drawRoundedRect(0, 0, width(), height(), 100, 100);
    QLabel::paintEvent(event);
}

结果:

【讨论】:

    猜你喜欢
    • 2018-10-09
    • 2021-11-08
    • 2022-09-23
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多