int side = qMin(width(), height());
QRegion maskedRegion(width() / 2 - side / 2, height() / 2 - side / 2, side, side, QRegion::Ellipse);
setMask(maskedRegion);
这样就可以将应用程序的界面设置成一个椭圆形状。也就是说,我们调用setMask这个函数,这个函数的参数是什么形状,我们的应用程序就会成为什么形状。我们看看setMask 参数中类型为QRegion对象的最后一个参数,在帮助信息中了解到这个类型可以取两个值,矩形和椭圆。定义如下,enum RegionType { Rectangle, Ellipse }我们将椭圆的宽和高设置为相同大小,就成为了正圆。 而我们再次看看QRegion这个类的构造函数,如下: QRegion () QRegion ( int x, int y, int w, int h, RegionType t = Rectangle ) QRegion ( const QPolygon & a, Qt::FillRule fillRule = Qt::OddEvenFill ) QRegion ( const QRegion & r ) QRegion ( const QBitmap & bm ) QRegion ( const QRect & r, RegionType t = Rectangle ) 我们可以看到,构造一个QRegion不仅可以是举行,椭圆,也可以是多边形,位图等等。 我们再次看看SetMask这个函数 void setMask ( const QBitmap & bitmap ) void setMask ( const QRegion & region ) 其中一个重载函数也可以是位图QBitmap类型,也就是说,这里的形状也可以像我们我们图片的形状一样,各种各样。 在这里需要注意的是,如果我们使用一个普通的bmp或者jpg图片,那么显示的形状应该是一个矩形。但是如果,我们使用png格式的图片,而将我们不需要显示的部分设置为透明,这样就可以出现各种各样的形状了。 QLabel topLevelLabel; QPixmap pixmap(":/images/tux.png"); topLevelLabel.setPixmap(pixmap); topLevelLabel.setMask(pixmap.mask()); setMask这句用在位图类里面是设置遮罩的,如果遮罩图相应位置为1,将不改变原图,如果为0,将不显示。
阅读(5122) | 评论(0) | 转发(0) |