chen12nan的个人主页

学习Qt的感想

http://www.qtcn.org/bbs/u/133503  [收藏] [复制]

chen12nan

  • 11

    关注

  • 11

    粉丝

  • 19

    访客

  • 等级:新手上路
  • 总积分:12
  • 男,1988-07-20

最后登录:2016-11-04

更多资料

日志

实现QImage在窗口中透明

2013-01-04 22:15
如果想在窗口中显示QImage,可以在void paintEvent(QPaintEvent *)函数中添加下面两行代码实现:
  1. QPainter painter(this);
    painter.drawImage(rect.topLeft(),image);//rect是一个QRect对象,image是一个QImage对象,都是成员变量

这是把图片显示在窗口上的代码实现。
如何设置QImage透明,这就要设置成员变量的alpha通道值。QImage是通过设置其alpha值来设置透明效果的。
下面是具体的实现代码:
  1. // EPWidget.h
    class EPWidget : public QWidget
    {
    public:
    EPWidget(QWidget *parent=0);
    protected:
    void paintEvent(QPaintEvent* );
    };


  1. //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时,图片的透明效果。可换别的值看看效果                      
                                                          
    



分类:Qt笔记|回复:0|浏览:2620|全站可见|转载
 

Powered by phpwind v8.7 Certificate Copyright Time now is:05-18 15:48
©2005-2016 QTCN开发网 版权所有 Gzip disabled