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;
}
我使用了这种实现方式,效果:
因为设置了无边框,没办法移动,我女神的脸。。。。TnT,补一张(0.0):
回到正题,第二种方法:是金山开源的代码,这里讲解的非常清除。
当我得到圆角图片后,我发现并没有办法去将其铺满显示在圆角控件上
最后我决定偷个懒,直接把控件设置透明
(未设置透明)
黑色是窗口背景色,绿色是控件背景色。
设置透明后,看看这鲜艳的狗头:
参考:QT4.8用Qwidget重写或者实现图片按钮+圆角算法的实现(这位博主很强啊)
End
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
