qt 实现图片的圆角显示

首先在网上了解了一下关于qt实现圆角图片的资料,发现大家都是先想办法设置圆角控件,然后再将处理好的圆角图片paint至控件上,圆角控件很容易实现,网上查到两种方式 ↓:

//method1:
//直接通过设置样式表实现
ui->label->setStyleSheet("border:2px groove gray;border-radius:10px;padding:2px 4px;");

//method2:
//将窗体设置为无边框窗体
setWindowFlags(Qt::FramelessWindowHint);
//设置关于窗体为圆角
QBitmap bmp(this->size());
bmp.fill();
QPainter p(&bmp);
p.setPen(Qt::NoPen);
p.setBrush(Qt::black);
p.drawRoundedRect(bmp.rect(),20,20);
setMask(bmp);

这两种方法均可以实现控件圆角效果,此外在method2出处提到了把圆角图片显示在圆角控件上的实现。所以开始想办法实现图片的圆角化,PS是不可能的,最后的实现是显示不停捕获的视频帧,所以只能考虑代码处理图片。同样找到了两种方法 ↓:

//method1:
QPixmap Form::round(const QPixmap& img_in, int radius)
{
    if (img_in.isNull())
    {
        return QPixmap();
    }
    QSize size(img_in.size());
    QBitmap mask(size);
    QPainter painter(&mask);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setRenderHint(QPainter::SmoothPixmapTransform);
    painter.fillRect(mask.rect(), Qt::white);
    painter.setBrush(QColor(0, 0, 0));
    painter.drawRoundedRect(mask.rect(), radius, radius);
    QPixmap image = img_in;// .scaled(size);
    image.setMask(mask);
    return image;
}

我使用了这种实现方式,效果:
qt 实现图片的圆角显示_第1张图片
因为设置了无边框,没办法移动,我女神的脸。。。。TnT,补一张(0.0):
qt 实现图片的圆角显示_第2张图片
回到正题,第二种方法:是金山开源的代码,这里讲解的非常清除。
当我得到圆角图片后,我发现并没有办法去将其铺满显示在圆角控件上
qt 实现图片的圆角显示_第3张图片
最后我决定偷个懒,直接把控件设置透明
(未设置透明)
qt 实现图片的圆角显示_第4张图片
黑色是窗口背景色,绿色是控件背景色。
设置透明后,看看这鲜艳的狗头:
qt 实现图片的圆角显示_第5张图片
参考:QT4.8用Qwidget重写或者实现图片按钮+圆角算法的实现(这位博主很强啊)

End

你可能感兴趣的:(QT,C++)