如果想在窗口中显示QImage,可以在void paintEvent(QPaintEvent *)函数中添加下面两行代码实现: - QPainter painter(this);
painter.drawImage(rect.topLeft(),image);//rect是一个QRect对象,image是一个QImage对象,都是成员变量
这是把图片显示在窗口上的代码实现。 如何设置QImage透明,这就要设置成员变量的alpha通道值。QImage是通过设置其alpha值来设置透明效果的。 下面是具体的实现代码: - // EPWidget.h
class EPWidget : public QWidget { public: EPWidget(QWidget *parent=0); protected: void paintEvent(QPaintEvent* ); };
- //EPWidget.cpp
EPWidget::EPWidget(QWidget *parent) : QWidget(parent) { resize(400,300); } void EPWidget::paintEvent(QPaintEvent *) { QPainter painter(this); QImage *image = new QImage(":/back.png"); //加载图片 //设置图片的格式,QImage::Format_ARGB32_Premultiplied有alpha通道值, //如果是QImage::[font=NSimsun]Format_RGB32则没有alpha,也就是说不能设置透明。[/font] QImage mage = image->scaled(200,200).convertToFormat(QImage::Format_ARGB32_Premultiplied); QRgb rgb; for(int i = 0;i<mage.rect().width();i++) for(int j = 0; j<mage.rect().height(); j++) { QRgb rgb1 = mage.pixel(i,j); //把图像的每个像素的值rgb值取出来。 rgb = qRgba(qRed(rgb1),qGreen(rgb1),qBlue(rgb1),[color=#ff0000][b]200[/b][/color]); //设置image的alpha值。 mage.setPixel(i,j,rgb); } painter.drawLine(80,80,320,320); painter.drawImage(100,100,mage); }
显示结果: alpha值为255,也就是不透明的效果。 alpha值为200时,图片的透明效果。可换别的值看看效果
|