Qt:将图像放置在圆形Qlabel中 - 屏蔽概念?

时间:2013-11-27 11:41:15

标签: c++ qt

我一直在谷歌搜索这个话题,由于某种原因,我认为我没有正确设置面具。我想要做的是在具有圆形形状的QLabel内显示图像。 不应显示跨越边界的图像部分。这就是我正在做的事情

QPixmap circ( ":/qt/images/circ.png" );
QPixmap img( ":/qt/images/no.bmp" );
ui.label_h->setMask(circ.mask());
ui.label_h->setPixmap(img);

circ文件是一个png图像,其中有一个黑色填充的圆圈,img显然是一个图像,任何有关如何实现这一点的建议都将受到高度赞赏。我的代码显然只是在方形边界中显示图像

更新

这就是我正在使用的

QPixmap circ( ":/qt/images/circ.png" );
    QPixmap mask = circ.createMaskFromColor(Qt::black, Qt::MaskOutColor);
    QPixmap img( ":/qt/images/no.bmp" );
    ui.label_h->setMask(mask);
    ui.label_h->setPixmap(img);

这是之前的结果

enter image description here

这些是链接

http://i.tinyuploads.com/EFxSB7.png

http://i.tinyuploads.com/9knGNd.bmp

1 个答案:

答案 0 :(得分:0)

你正在调用circ.mask(),根据Qt文档: -

  

从像素图的alpha通道中提取位图蒙版。

你说圈中的图像有一个黑色的圆圈,所以要么将它改成圆圈的alpha通道,要么从图像中创建遮罩: -

QPixmap mask = circ.createMaskFromColor(Qt::black, Qt::MaskOutColor);

然后使用这个面具: -

ui.label_h->setMask(mask);